• left join 太神奇了


    概念:

    • 把left join左边的表的记录全部找出来。系统会先用表A和表B做个笛卡儿积,然后以表A为基表,去掉笛卡儿积中表A部分为NULL的记录。最后形成你的结果。

    • 进行左连接时,就有涉及到主表、辅表,这时主表条件写在WHERE之后,辅表条件写在ON后面。

    • 二、实例

      1、表a结构和数据

      table a(id, type):
      
      id     type 
      
      ----------------------------------
      
      1      1         
      
      2      1          
      
      3      2     
    • 2、表b结构和数据

      table b(id, class):
      
      id    class 
      
      ---------------------------------
      
      1      1
      
      2      2
    • 3、SQL语句调用

      --sql语句1:
      
      select a.*, b.* from a left join b on a.id = b.id and a.type = 1; //a表id 等于b表id ,a.type=1 可以 true也可以false,左联
      
      执行结果为:
      
      a.id    a.type    b.id    b.class
      
      ----------------------------------------
      
      1        1            1        1
      
      2        1            2        2
      
      3        2     

      

    • --sql语句3:
      
      select a.*, b.* from a left join b on a.id = b.id and b.class = 1;  //a表id等于b表id , b.class 等于1或者不等于1,左联
      
      执行结果为:
      
      a.id    a.type    b.id    b.class
      
      ----------------------------------------
      
      1        1            1        1
      
      2        1            
      
      3        2          
      
    • 4、总结:

      • sql语句1可见,left join 中左表的全部记录将全部被查询显示,on 后面的条件对它不起作用,除非再后面再加上where来进行筛选,这就是sql语句2了。

      • 由sql语句3可见,on后面的条件中,右表的限制条件将会起作用。

      --总结了一种简单的方式来理解上述情况:

      •   LEFT JOIN ON WHERE:在临时表生成后,再对临时表的数据进行过滤,再返回左表。

          LEFT JOIN ON AND:在临时表生成的过程时,ON中的条件不管是否为真,都将返回左表。

       其实以上结果的关键原因就是left join,right join,full join的特殊性,不管on上的条件是否为真都会返回left或right表中的记录,full则具有left和right的特性的并集。而inner jion没这个特殊性,则条件放在on中和where中,返回的结果集是相同的。
  • 相关阅读:
    古人诗词之王安石
    关于周期函数的命题
    Strum—Lioville问题
    计算反常积分
    【面积原理】计算级数和
    【洛谷P6046】纯粹容器
    【洛谷P3631】方格染色
    【牛客挑战赛48 E】速度即转发
    【CF103D】Time to Raid Cowavans
    【洛谷P4280】逆序对
  • 原文地址:https://www.cnblogs.com/xiaohuizhenyoucai/p/10615634.html
Copyright © 2020-2023  润新知