Mysql left join、right join、inner join的区别以及适用场景
前言:
内连接:
内连接即等值连接
select a.name,b.age from a inner join b on a.id = b.id;
select a.name,b.age from a,b where a.id = b.id;
左连接:
在等值连接的基础上加上主表(左表)中未匹配的记录
select a.name,b.age from a left outer join b on a.id=b.id;
select a.name,b.age,c.sex from a left outer join b on a.id = b.id left outer join on a.id = c.id;
右连接:
在等值连接的基础上加上主表(右表)中未匹配的记录
select a.name,b.age from a right outer join b on a.id=b.id;
select a.name,b.age,c.sex from a right outer b on a.id = b.id right outer join c on b.id = c.id;
注意: 可以将a left outer join b on a.id = b.id看成是一张C表 on 后面的条件无论是否为真,都返回a表的全部记录.
以下转载自:https://blog.csdn.net/fashion2014/article/details/78826299
left join(左连接) 返回包括左表中的所有记录和右表中连接字段相等的记录
Table A
id name
01 abc
02 ab
Table B
id cnt
01 3
03 4
Select A.id,A.name,B.cnt A leftjoin B on A.id=B.id
结果
id name cnt
01 abc 3
02 ab null
特别地,也有记录条数大于左边表的时候,例如:
Table A
id name
01 abc
02 ab
Table B
id cnt
01 3
01 5
03 4
Select A.id,A.name,B.cnt A left join B on A.id=B.id
结果
id name cnt
01 abc 3
01 abc 5
02 ab null
结果是3条记录,比左连接左边的表table A的记录条数2还要多。
连接字段即两表的id字段
right join(右连接) 返回包括右表中的所有记录和左表中连接字段相等的记录
Table B
id cnt
01 3
03 4
Table A
id name
01 abc
02 ab
Select A.id,A.name,B.cnt B right join A on A.id=B.id
结果
id name cnt
01 abc 3
02 ab null
左连接和右连接很相似,只是左右表位置的不同罢了。适用场景,如:员工表中有个字段是详细地址信息表的主键id,这两个表相关联时,就可以用左连接或右连接,因为在详细地址信息表中找不到某员工的地址信息也要将员工这条记录显示出来,相应的详细地址信息字段为空即可,而不能因为地址没有存在数据库里,这个员工就没了(简单理解成不重要的信息不影响整条记录的显示)
inner join(等值连接、内连接) 只返回两个表中连接字段相等的行
Table A
id name
01 abc
02 ab
Table B
id cnt
01 3
03 4
Select A.id,A.name,B.cnt A inner join B on A.id=B.id
结果
id name cnt
01 abc 3
内连接的适用场景:相连接的两个表中必须在某个字段上有相等的值才可以将整条记录显示出来,如一条服务单记录在了两个表中,A表中记录了该服务单的服务时间、坐席名称和录音地址等基本信息,B表中记录了该服务单的业务详情,如保险单号,车牌号,保单日期等,当显示该服务单时,要将A表与B表做内连接,因为少这两表任何一个表,该服务单都不算完整,缺失的信息会使业务上没法继续。
总结:可以将可使用左连接和右连接的两个表理解成其中一个表的信息明显比另外一个表的信息重要得多;使用内连接的两个表理解成重要程度区别不太大的两个表。
注意:看“重要”与否的标准要对于查询结果的显示而言。
转载:
https://blog.csdn.net/fashion2014/article/details/78826299
Mysql 中的几种join 及 full join问题
参考文档1:
https://www.cnblogs.com/canger/p/9760217.html
参考文档2:
https://blog.csdn.net/u012410733/article/details/63684663
参考文档3:
https://segmentfault.com/a/1190000017369618
参考文档4:
https://www.cnblogs.com/zxlovenet/p/4005256.html