[英]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子句進行過濾)。 我應該期望使用不同查詢的不同輸出嗎?
謝謝你的幫助。
是的,不,不。
再具體一點:
是的,語法是正確的。 從概念上講,第一個查詢在t1
和t2
之間創建一個內連接,連接條件為t1.id = t2.id AND t2.id = 0
,而第二個查詢在t1.id = t2.id
上創建一個內連接,然后過濾結果使用條件t2.id = 0
。
但是,我所知道的任何SQL引擎都不會實際執行這樣的查詢。 相反,在這兩種情況下,引擎都會將它們優化為t1.id = 0 AND t2.id = 0
,然后進行兩次單行查找。
不,幾乎任何合理的SQL引擎都應該將這兩個查詢視為有效相同。
不,見上文。
順便說一句,以下編寫相同查詢的方法也是有效的:
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.