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

      

  • 相关阅读:
    thinkPHP入门之二
    thinkPHP入门
    斐波那契数列,冒泡排序,选择排序,数组去重
    jquery-懒加载插件
    本地存储之cookie
    javascript的快速排序法
    [luogu2165 AHOI2009] 飞行棋 (枚举)
    [luogu2576 SCOI2010] 幸运数字 (容斥原理)
    [luogu2587 ZJOI2008] 泡泡堂 (贪心)
    [luogu2602 ZJOI2010] 数字计数 (数位dp)
  • 原文地址:https://www.cnblogs.com/bruceChan0018/p/14868930.html
Copyright © 2020-2023  润新知