表连接查询

前言

我们在写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。但是数据库官方的建议是尽量全部使用左连接,而不使用右连接。我们注意一下即可。

一起学习,一起进步,每天只要进步一点点,时间久了,就是质的飞跃。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值