Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 连接的WHERE和ON之间的SQL差异_Mysql_Sql - Fatal编程技术网

Mysql 连接的WHERE和ON之间的SQL差异

Mysql 连接的WHERE和ON之间的SQL差异,mysql,sql,Mysql,Sql,使用连接时,我们可以选择使用WHERE子句和OR子句 问题:这两者之间有性能差异吗?是否应该使用一个而不是另一个?到底有什么区别 例如: SELECT field FROM table1 INNER JOIN table2 ON table1.id = table2.id; 或 性能应该相同,但我更喜欢任何新开发的显式连接语法。性能应该相同,但我更喜欢任何新开发的显式连接语法。在内部连接中,可以互换使用上的和其中的,只是一种偏好而已。底层逻辑不会改变,也不会对执行计划产生影响 对于外部联接,

使用连接时,我们可以选择使用WHERE子句和OR子句

问题:这两者之间有性能差异吗?是否应该使用一个而不是另一个?到底有什么区别

例如:

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