Mysql 连接的WHERE和ON之间的SQL差异
使用连接时,我们可以选择使用WHERE子句和OR子句 问题:这两者之间有性能差异吗?是否应该使用一个而不是另一个?到底有什么区别 例如:Mysql 连接的WHERE和ON之间的SQL差异,mysql,sql,Mysql,Sql,使用连接时,我们可以选择使用WHERE子句和OR子句 问题:这两者之间有性能差异吗?是否应该使用一个而不是另一个?到底有什么区别 例如: SELECT field FROM table1 INNER JOIN table2 ON table1.id = table2.id; 或 性能应该相同,但我更喜欢任何新开发的显式连接语法。性能应该相同,但我更喜欢任何新开发的显式连接语法。在内部连接中,可以互换使用上的和其中的,只是一种偏好而已。底层逻辑不会改变,也不会对执行计划产生影响 对于外部联接,
SELECT field
FROM table1
INNER JOIN table2
ON table1.id = table2.id;
或
性能应该相同,但我更喜欢任何新开发的显式连接语法。性能应该相同,但我更喜欢任何新开发的显式连接语法。在
内部连接中,可以互换使用上的和其中的,只是一种偏好而已。底层逻辑不会改变,也不会对执行计划产生影响
对于外部联接
,情况完全不同
a。WHERE
子句中的过滤条件,即
SELECT * FROM A left join B
ON A.id=B.id
WHERE B.id=1
SELECT * FROM A left join B
ON A.id=B.id
AND B.id=1
上述查询的功能类似于内部联接
,并将整个结果仅限于B.id=1的行(注意,过滤器应用于左联接
运算符右侧的表)
b。ON
条款中的过滤条件,即
SELECT * FROM A left join B
ON A.id=B.id
WHERE B.id=1
SELECT * FROM A left join B
ON A.id=B.id
AND B.id=1
上面的查询只会限制表B的行,因为它们被映射到LEFT JOIN
操作符中的表A
。因此,结果将包含表A的所有行
和表B的列中的值
仅包含与条件B.id=1
要归功于@Abraham-对于内部连接中的相同,您可以互换地使用上的和中的,这只是一种偏好。底层逻辑不会改变,也不会对执行计划产生影响
对于外部联接
,情况完全不同
a。WHERE
子句中的过滤条件,即
SELECT * FROM A left join B
ON A.id=B.id
WHERE B.id=1
SELECT * FROM A left join B
ON A.id=B.id
AND B.id=1
上述查询的功能类似于内部联接
,并将整个结果仅限于B.id=1的行(注意,过滤器应用于左联接
运算符右侧的表)
b。ON
条款中的过滤条件,即
SELECT * FROM A left join B
ON A.id=B.id
WHERE B.id=1
SELECT * FROM A left join B
ON A.id=B.id
AND B.id=1
上面的查询只会限制表B的行,因为它们被映射到LEFT JOIN
操作符中的表A
。因此,结果将包含表A的所有行
和表B的列中的值
仅包含与条件B.id=1
要归功于@Abraham-这是相同的有一些事情你不能做,旧的表1,表2
语法你可以用新的表1连接表2
语法来做。此外,对于涉及多个表的查询,较旧的语法非常难以阅读。有些事情您无法使用较新的table1连接table2
语法来执行较旧的table1、table2
语法。此外,对于涉及多个表的查询,较旧的语法非常难以阅读