可能重复:
Difference between “and” and “where” in joins
In MySQL queries, why use join instead of where?
之间有什么区别
SELECT *
from T1
JOIN T2 ON T1.X = T2.X
AND T1.Y = T2.Y
和
SELECT *
from T1
JOIN T2 ON T1.X = T2.X
WHERE T1.Y = T2.Y
答案 0 :(得分:1)
区别仅在于外连接。为了简单起见,我要求你解决这个问题 - 我认为你将经历的心理过程将有助于清除这一点。这些可以在INNER JOINS
中重写,通常是。
SELECT * FROM t1
LEFT OUTER JOIN t2
ON ( true )
WHERE false
-vs -
SELECT * FROM t1
LEFT OUTER JOIN t2
ON ( false )
WHERE true
答案 1 :(得分:0)
where子句通常会扫描任何连接的结果并对其进行过滤,从而可能使其变慢。但是,使用现代查询优化器,可能会提前将其推送到连接过程中,使其同样快速/等效。我只是选择在开启期间选择更加“正确”的加入路线,所以我不必担心优化器正在做什么。
注意:where子句也可以在连接上具有各种条件,例如
其中t1.id = t2.id或t1.pickmynose ='TRUE'
这就是为什么它可以在那里使用(我认为),但除非需要,否则不应该使用它。
答案 2 :(得分:0)
你使用它们的方式(内连接),我不认为会有任何。如果使用外连接,您会看到差异,因为ON子句不会过滤掉行,而是返回T1或T2字段全部为NULL的行。