Ale*_*lex 3 mysql sql join inner-join
大家好我在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
Run Code Online (Sandbox Code Playgroud)
请注意查询结尾处的差异.在第一个中我使用AND子句(之前不使用WHERE子句).在第二个中,我使用WHERE来指定我的id.
第一种语法是否正确?如果是第一个在性能方面更好(不使用WHERE子句进行过滤).我应该期望使用不同查询的不同输出吗?
谢谢你的帮助.
Ilm*_*nen 11
是的,不,不.
再具体一点:
是的,语法是正确的.从概念上讲,第一查询创建之间内部联接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
Run Code Online (Sandbox Code Playgroud)