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版权协议,转载请附上原文出处链接和本声明。