簡體   English   中英

內部聯接或WHERE子句中的AND語句之間的差異

[英]Difference between the AND statement in an Inner Join or in a WHERE clause

大家好我在SQL中有一個關於AND子句的具體問題。

以下兩個SQL語句提供相同的輸出:

SELECT * FROM Table1 t1 INNER JOIN Table2 t2 ON t1.id = t2.id AND t2.id = 0


SELECT * FROM Table1 t1 INNER JOIN Table2 t2 ON t1.id = t2.id WHERE t2.id = 0

請注意查詢結尾處的差異。 在第一個中我使用AND子句(之前不使用WHERE子句)。 在第二個中,我使用WHERE來指定我的id。

第一種語法是否正確? 如果是第一個在性能方面更好(不使用WHERE子句進行過濾)。 我應該期望使用不同查詢的不同輸出嗎?

謝謝你的幫助。

是的,不,不。

再具體一點:

  1. 是的,語法是正確的。 從概念上講,第一個查詢在t1t2之間創建一個內連接,連接條件為t1.id = t2.id AND t2.id = 0 ,而第二個查詢在t1.id = t2.id上創建一個內連接,然后過濾結果使用條件t2.id = 0

    但是,我所知道的任何SQL引擎都不會實際執行這樣的查詢。 相反,在這兩種情況下,引擎都會將它們優化為t1.id = 0 AND t2.id = 0 ,然后進行兩次單行查找。

  2. 不,幾乎任何合理的SQL引擎都應該將這兩個查詢視為有效相同。

  3. 不,見上文。

順便說一句,以下編寫相同查詢的方法也是有效的:

SELECT * FROM Table1 t1 INNER JOIN Table2 t2 WHERE t1.id = t2.id AND t2.id = 0

SELECT * FROM Table1 t1, Table2 t2 WHERE t1.id = t2.id AND t2.id = 0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM