前言
我们在写SQL语句查询的时候,常常需要将多张表进行连接, 而连接也分几种:left join(左连接)、right join(右连接)、inner join(内连接)、full join(全连接)。不同的连接方式会导致不同的查询结果。下面,我们来看看以上几种连接的区别。
连接查询
准备两张数据表aaa和bbb。aaa表如下:
一共8条数据。
bbb表如下:
一共7条数据。
1、左连接
使用left join on。以左表为准,左表中的所有数据一定会显示出来,左表中有而右表中没有的数据右表会置为null,SQL如下:
select * from aaa
left join bbb
on aaa.id = bbb.id;
查询结果如下:
查询结果一共11条记录。可以看到左表id为4和5的在右表中没有记录,所以右边为null。
2、右连接
使用right join on。以右表为准,右表中的所有数据一定会显示出来,右表中有而左表中没有的数据左表会置为null,SQL如下:
select * from aaa
right join bbb
on aaa.id = bbb.id;
查询结果如下:
查询结果一共11条记录。可以看到右表id为6和9的在左表中没有记录,所以左边为null。
3、内连接
使用inner join on。返回左右表中互相匹配的所有行。SQL如下:
select * from aaa
inner join bbb
on aaa.id = bbb.id;
查询结果如下:
一共有9条记录。只会显示左右表中id相互匹配的行。
4、全连接
注意,在oracle数据库中是支持全连接full join on的,但是在MySQL中是不支持该语法的,可以使用left join + union + right join来进行替代。SQL如下:
select * from aaa
left join bbb
on aaa.id = bbb.id
union
select * from aaa
right join bbb
on aaa.id = bbb.id;
查询结果如下:
一共有13条记录。左右表中的所有数据都会显示出来,这种结果是将左连接查询的结果和右连接查询的结果并起来取并集。
5、左连接还是右连接
需要注意的是,在写业务SQL的时候,我们往往会疑惑是使用左连接查询还是右连接查询。实际上,左右连接是可以互相取代的,只需调换左右表的位置顺序即可,from a left join b等价于from b right join a。但是数据库官方的建议是尽量全部使用左连接,而不使用右连接。我们注意一下即可。
一起学习,一起进步,每天只要进步一点点,时间久了,就是质的飞跃。