使用left join 时,on和where的条件的区别如下
- on条件是在生成临时表时使用的条件,不管on中的条件是否为真,都会返回左表中的记录。
- where条件是在临时表生成好后,在对临时表进行过滤条件,条件不为真的就全部过滤。
案例:
- select * from tab1 left join tab2 on tab1.size = tab2.size where tab2.name = "AAA"
- on 条件: tab1.size = tab2.size,得到4条笛卡尔积记录
- 再对中间表where过滤: tab2.name = "AAA",得到1条匹配记录
- select * from tab1 left join tab2 on tab1.size = tab2.size and tab2.name = "AAA"
- on 条件: tab1.size = tab2.size and tab2.name = "AAA" (条件不为真也会返回左表记录,得到3条左表记录)
使用left join,right join,full join都跟left join一样,而inner join 放on和where都返回一样的结果集。
以上参考:https://mp.weixin.qq.com/s/0nVERgSxwK3-DkkrTFV37w