MySQL的内连接(inner join)和外连接(left join和 left join)的原理和区别

MySQL的内连接(inner join)和外连接(left join和 left join)的原理和区别

1、原理之笛卡尔积

简单原理,就是a表的每一行去连接b表的每一行,最终有a表条数xb表条数(mxn)条,具体做法是

(1)用a表第一行连接b表第一行,a表的第一行连接b表的第二行,…,a表的第一行连接b表的第n行;

(2)用a表第二行连接b表第一行,a表的第二行连接b表的第二行,…,a表的第二行连接b表的第n行;

​ …

(3)用a表第m行连接b表第一行,a表的第m行连接b表的第二行,…,a表的第m行连接b表的第n行;

2、区别

两张表的数据如下:

​ a表

在这里插入图片描述

​ b表

在这里插入图片描述

这里就是根据查询结果进行分析

(1)内连接(inner join)

select * from a inner join b on a.id = b.id;
# 下面这条语句执行结果和上面的相同
select * from a,b where a.id = b.id;

结果:

在这里插入图片描述

(2)左连接(left join)

select * from a left join b on a.id = b.id;

可以看出来这个left join会保留左边表所有的数据,不管有没有连接上右边表

结果:

在这里插入图片描述

(3)右连接(right join)

select * from a right join b on a.id = b.id;

同理,可以right join也是保留右边表所有数据,不管有没有连接上左边表

结果:

在这里插入图片描述

测试:

在b表上增加一行id为5,score为100的数据,看是否符合预期

在这里插入图片描述

执行上面的语句,看一下结果,可以看到符合预期

在这里插入图片描述


版权声明:本文为qq_38056518原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。