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

2022-08-07 10:17:22

 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;
  • 作者:weixin_39766258
  • 原文链接:https://blog.csdn.net/weixin_39766258/article/details/111254055
    更新时间:2022-08-07 10:17:22