Join连接
基于SQL语言实现
本文主要围绕多表联合查询Join的应用
内连接
A、B两表共有
SQL实现:
SELECT FROM tb_a A INNER JOIN tb_b B ON A.bId = B.id;
左连接(左外连接)
A、B两表共有+A表独有
SQL实现:
SELECT FROM tb_a A LEFT JOIN tb_b B ON A.bId = B.id;
A表独有
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表独有
SQL实现:
SELECT FROM tb_a A RIGHT JOIN tb_b B ON A.bId = B.id;
B表独有
SQL实现:
SELECT FROM tb_a A RIGHT JOIN tb_b B ON A.bId = B.id WHERE A.bId IS NULL;
说明:右连接与右外连接同样存在歧异,参考对左连接和左外连接的理解即可。
全连接(全外连接)
A、B两表全有
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表独有
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;