MySQL 关联查询中使用 on 和 where 子句有什么区别?

MySQL 关联查询中使用 on 和 where 子句有什么区别?

阅读 3.3k
3 个回答

我是搬运工。

1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

个人理解 on 是在查询的过程中对关联表使用过滤 从而得到最终查询结果,而where是在关联查询的时候 对关联查询的结果过滤,从而得到最终结果。

mysql join使用on 与where 筛选的差异

// 先on条件筛选表,然后两表再做left join。而对于where来说在left join结果再次筛选。
select  A.ID as AID, B.ID as BID  from A left join B on A.ID = B.ID and  B.ID<3 ;
//等同
select  A.ID as AID, B1.ID as BID  
from A left join  ( select B.ID from B  where B.ID <3 )B1 on A.ID = B1.ID 

仅在外链接中才有区别,ON不会匹配外连接条件的所匹配的输出行。

推荐问题