联表查询用on和where的区别

使用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

posted @ 2021-04-15 21:01  smallzhen  阅读(669)  评论(0编辑  收藏  举报