连接的 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 中,您可以交替使用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 运算符右侧的表)

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 区别 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

sql on 用where 区别?

Sql_连接查询中on筛选与where筛选的区别

SQL左右连接中的on and和on where的区别

转!!SQL左右连接中的on and和on where的区别

SQL on and 和 on where 的区别

sql连接查询中on筛选与where筛选的区别