使用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;
答案 0 :(得分:2)
在INNER JOIN
中,您可以互换使用ON
和WHERE
,只是一个偏好的情况。基础逻辑不会发生变化,也不会对执行计划产生影响。
与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
语法。此外,对于涉及多个表的查询,较旧的语法难以阅读。