zoukankan      html  css  js  c++  java
  • 小结left join以及中间表查询(又补充了inner join的一些内容)

    直接上例子:

    a表

     

    b表

    ab表

     

    一、left join 过程(以 select * from a left join ab on a.a_id = ab.a_id):

    用a中的记录根据on条件联合ab的记录进行筛选并做笛卡尔积,过称为

      筛选过程:

            1、a: 1,"lige"  ab: 1,3

                      1,2

            2、a: 2,"jk"    ab:2,3

            3、a:3,"df"   ab:3,3

              4、a:4,"kk"     ab:NULL

      

      笛卡尔积:

             1、  1,"lige",1,3

            1,"lige",1,2

           2、 2,"jk",2,3

           3、 3,"df",3,3

           4、"kk",null,null

    先读a表的 1,"lige"这条记录,然后根据条件在b表中筛选出1,3、1,2两条记录,做笛卡尔积,得到结果中的两条记录,然后依次进行下去

    即为查询的结果

    二、三张表连接查询的过程

    就是在a和ab做了连接查询得到的结果上再与b做连接查询

    select * from a left join ab on a.a_id=ab.a_id left join b on ab.b_id=b.b_id;

    三、LEFT JOIN条件放ON和WHERE后的区别(图转自百度经验)

     注意:条件放WHERE后时的先连接后筛选是指在根据on筛选、笛卡尔积连接(即一中的过程)之后的结果上再进行筛选!!!

     四、inner join

    inner join不会保证做连接查询的两个表中的任何一个表中的记录被查出来

    以一中的表为例:

    先进行left join

    然后是inner join

    可以看得出来,a和ab表进行左连接查询时,a表中的所有记录都被查询出来,如果ab表中没有符合连接查询条件的记录则显示为null

    而inner join 时,a表中被查询出来的只是符合连接条件的记录

     

     

  • 相关阅读:
    Path类
    C#集合
    阿里巴巴2013年实习生笔试题B
    阿里巴巴2013年实习生笔试题A
    腾讯2014年校园招聘笔试试题
    腾讯技术类校园招聘笔试试题
    腾讯2013年实习生笔试题
    腾讯2012年实习生笔试题
    hdu1505
    hdu1506
  • 原文地址:https://www.cnblogs.com/lige-H/p/7274074.html
Copyright © 2011-2022 走看看