zoukankan      html  css  js  c++  java
  • 对各种join的理解

      最近使用left join,inner join时,发现对它们的理解并不到位,在此总结一下。

      首先,对于left join,right join,inner join 以及outer join的区别,当ON条件之后在各自表中都有唯一约束时,可以参考 https://blog.csdn.net/weixin_41796956/article/details/85044152 中对于他们的描述,这个图总结得很好。

      

      但是,这里需要再次强调的是,只有当我们设置的条件ON后的字段,在两张表中都具有唯一约束时,这个图才能准确地反映出JOIN之后的结果。如果ON后的条件并不具备唯一性,那么join的结果与图中的结果并不相符。下面给出例子,结果集已经超出整个A1表的范围:

     

      在该例子中,B1表中的code不是唯一约束,所以在join之后,B表中与A表中code相同的内容,会以笛卡尔积的形式体现出来。

      

      这种重复字段以笛卡尔积的形式出现,对于inner join同样适用(left join与inner join的区别在于:left join时,即使B表中在ON条件不符合,A表中的内容还是会完整地展示出来,B中不存在但又必须展示的字段以Null补齐;而inner join对双方都要保证ON后的字段存在,不存在的不会以Null补齐。注意分析需求,对应的场景需要采用合适的关键词)。

      所以,这里要特别注意的是,在使用join,且ON条件之后的字段内容有重复时,注意去重,一般在子表或者JOIN结果集使用GROUP BY进行去重操作。

      

  • 相关阅读:
    [APIO2014]序列分割
    [HNOI2014]世界树
    [THUWC2017]随机二分图
    快乐游戏鸡
    [SHOI2014]三叉神经树
    带花树学习笔记
    最小树形图——朱刘算法学习笔记
    【WC2018】即时战略
    [HNOI2015]接水果
    [HAOI2018]染色
  • 原文地址:https://www.cnblogs.com/bruceChan0018/p/14868930.html
Copyright © 2011-2022 走看看