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进行去重操作。

      

  • 相关阅读:
    UVA 12546 LCM Pair Sum
    两两间的距离都是整数的点集
    Codeforces 11.27
    Codeforces 11.27 B
    UVA 105
    打印自身的程序
    Interval DP
    Tree DP
    参加第五次全国工程建设行业信息化建设高峰论坛 (个人的一点感想)
    基础资料分类及清单版本管理
  • 原文地址:https://www.cnblogs.com/bruceChan0018/p/14868930.html
Copyright © 2011-2022 走看看