连接的WHERE和ON之间的SQL差异

时间:2014-04-04 23:13:11

标签: mysql sql

使用JOINS时,我们可以选择使用WHERE子句和OR子句。

问题:这两者之间是否有性能差异?应该使用另一个吗?有什么区别?

示例:

SELECT field 
FROM table1
INNER JOIN table2
ON table1.id = table2.id;

SELECT field 
FROM table1, table2
WHERE table1.id = table2.id;

3 个答案:

答案 0 :(得分:2)

INNER JOIN中,您可以互换使用ONWHERE,只是一个偏好的情况。基础逻辑不会发生变化,也不会对执行计划产生影响。

OUTER JOINs完全不同。

一个。 WHERE条款中的过滤标准,即

SELECT * FROM A left join B
ON A.id=B.id
WHERE B.id=1

上述查询的作用类似于INNER JOIN,并且仅将整个结果限制为B.id = 1的行(请注意,过滤器应用于LEFT JOIN右侧的表格操作者)

ON条款中的过滤标准,即

SELECT * FROM A left join B
ON A.id=B.id
AND B.id=1

上述查询仅限制表B的行,因为它们被映射到table A运算符中的LEFT JOIN。因此,结果将包含table A的所有行和table B列中的值仅适用于符合条件B.id=1的行

归功于@Abraham - 这是同一个<{p>的SQLFIDDLE

答案 1 :(得分:1)

性能应该相同,但我更喜欢任何新开发的显式连接语法。

答案 2 :(得分:1)

您可以使用较新的table1, table2语法执行较旧的table1 join table2语法。此外,对于涉及多个表的查询,较旧的语法难以阅读。