mysql JOIN中ON和WHERE有什么区别?

时间:2010-08-30 19:49:59

标签: sql mysql database join

  

可能重复:
  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

3 个答案:

答案 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的行。