小结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表中被查询出来的只是符合连接条件的记录

 

 

原文地址:https://www.cnblogs.com/lige-H/p/7274074.html