inner join去除重复_SQL 七种Join连接

 Join连接 

基于SQL语言实现

本文主要围绕多表联合查询Join的应用


 内连接 

A、B两表共有

ffb0bbead00fb6bb9ebca101f816b647.png

SQL实现:

SELECT FROM tb_a A INNER JOIN tb_b B ON A.bId = B.id;

 左连接(左外连接)

A、B两表共有+A表独有

b001dc98581dad001ba0610b54e9a2e6.png

SQL实现:

SELECT FROM tb_a A LEFT JOIN tb_b B ON A.bId = B.id;

A表独有

b9c08c090234b41b0091c444520d3b17.png

SQL实现:

SELECT FROM tb_a A LEFT JOIN tb_b B ON A.bId = B.id WHERE B.id IS NULL;

说明:关于左连接与左外连接存在一定的歧异,有些人认为左连接表示的是(A表独有),左外连接表示的是(A、B两表共有+A表独有)。但在我看来两者本质相同,只是写法上存在差异:LEFT JOIN 左连接、LEFT OUTER JOIN 左外连接,都是同样的查询效果,但是将用法融会贯通后叫什么连接也就无关紧要了。


 右连接(右外连接)

A、B两表共有+B表独有

8247404ba49a50e22f79bfb6487aa515.png

SQL实现:

SELECT FROM tb_a A RIGHT JOIN tb_b B ON A.bId = B.id;

B表独有

693b70b382a50923a34a9564879d2192.png

SQL实现:

SELECT FROM tb_a A RIGHT JOIN tb_b B ON A.bId = B.id WHERE A.bId IS NULL;

说明:右连接与右外连接同样存在歧异,参考对左连接和左外连接的理解即可。


 全连接(全外连接)

A、B两表全有

c075d70bcc86092ee4a1379ae154fc8b.png

SQL实现:

SELECT FROM tb_a A FULL JOIN tb_b B ON A.bId = B.id;

说明:MySQL不支持FULL JOIN,可采用如下方法代替。

SELECT FROM tb_a A LEFT JOIN tb_b B ON A.bId = B.idUNIONSELECT FROM tb_a A RIGHT JOIN tb_b B ON A.bId = B.id

注:UNION可去除重复数据

A表独有+B表独有

6fdf4771376b5392a47326f1ca85ed95.png

SQL实现:

SELECT FROM tb_a A FULL JOIN tb_b B ON A.bId = B.id WHERE A.bId IS NULL OR B.id IS NULL;

MySQL实现:

SELECT FROM tb_a A LEFT JOIN tb_b B ON A.bId = B.id WHERE B.id IS NULLUNIONSELECT FROM tb_a A RIGHT JOIN tb_b B ON A.bId = B.id WHERE A.bId IS NULL;

d499cf2f9aa50bf8701bc3156120099f.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值