【问题标题】:SQL Difference Between WHERE and ON for Joins [duplicate]连接的 WHERE 和 ON 之间的 SQL 区别 [重复]
【发布时间】: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;

【问题讨论】:

标签: mysql sql


【解决方案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 语法。此外,对于涉及多个表的查询,旧语法非常难以阅读。

      【讨论】:

        猜你喜欢
        • 2012-09-06
        • 2012-07-17
        • 2023-03-15
        • 2012-10-19
        • 2011-06-10
        • 2013-11-25
        • 2015-03-05
        • 1970-01-01
        相关资源
        最近更新 更多