连接的 WHERE 和 ON 之间的 SQL 区别 [重复]
Posted
技术标签:
【中文标题】连接的 WHERE 和 ON 之间的 SQL 区别 [重复]【英文标题】:SQL Difference Between WHERE and ON for Joins [duplicate] 【发布时间】:2014-05-17 11:01:56 【问题描述】:当使用 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;
【问题讨论】:
***.com/questions/1599050/… ***.com/questions/354070/… 【参考方案1】:在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
运算符右侧的表)
b. ON
子句中的过滤条件,即
SELECT * FROM A left join B
ON A.id=B.id
AND B.id=1
上述查询只会限制表 B 的行,因为它们在 LEFT JOIN
运算符中映射到 table A
。所以结果将包含table A
的所有行和table B
列中的值,仅用于匹配条件B.id=1
的行
感谢@Abraham - 这是相同的SQLFIDDLE
【讨论】:
【参考方案2】:性能应该相同,但我更喜欢任何新开发的显式连接语法。
【讨论】:
【参考方案3】:有些事情你不能用较新的table1 join table2
语法做旧的table1, table2
语法。此外,对于涉及多个表的查询,旧语法非常难以阅读。
【讨论】:
以上是关于连接的 WHERE 和 ON 之间的 SQL 区别 [重复]的主要内容,如果未能解决你的问题,请参考以下文章