• 对各种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进行去重操作。

      

  • 相关阅读:
    Python 容器用法整理
    C/C++中浮点数格式学习——以IEEE75432位单精度为例
    关于C/C++中的位运算技巧
    [GeekBand] C++11~14
    [GeekBand] 探讨C++新标准之新语法——C++ 11~14
    [GeekBand] 面向对象的设计模式(C++)(2)
    [GeekBand] 面向对象的设计模式(C++)(1)
    [GeekBand] STL与泛型编程(3)
    [GeekBand] STL与泛型编程(2)
    [GeekBand] STL与泛型编程(1)
  • 原文地址:https://www.cnblogs.com/bruceChan0018/p/14868930.html
Copyright © 2020-2023  润新知