一文搞懂SQL中的所有JOIN

前言在平时的工作中,尤其是跟后台打交道的或多或少都会离不开数据库,而用的最多的就是对数据库执行查询操作 。查询有涉及单表的,有涉及多表的,而一般分析数据最多的就是从多个表中获取县官数据,这里就涉及到连接 。以前看过很多的官员SQL连接的介绍,一上来就会以数学集合的概念来说 。这对于像我一样的数学小白菜来说,理解起来就如登天 。今天就以图形化方式来把涉及到的SQL连接总结下 。
约定建立两张表,表结构及数据如下

一文搞懂SQL中的所有JOIN

文章插图
 
常用join汇总
一文搞懂SQL中的所有JOIN

文章插图
 
连接分inner join(内连接)、outer join(外连接)、cross join(笛卡儿积) 。外连接又分左外连接(左连接):left join,右外连接(右连接):right join,全外连接(全连接):full join 。下面一一进行说明:
1. Left join:左连接,顾名思义就是返回左表的所有行和匹配的右表的行,如果没有匹配上就为null或者空 。
一文搞懂SQL中的所有JOIN

文章插图
 
以上面约定的表为例:
select * from Person left join Address on Person.PersonID = Address.PersonID;
执行结果如下:
一文搞懂SQL中的所有JOIN

文章插图
 
其过程参考下图理解:
一文搞懂SQL中的所有JOIN

文章插图
 
2. Right join:右连接,返回右表所有的行和匹配的左表的行,如果没有匹配上用null或者空 。
一文搞懂SQL中的所有JOIN

文章插图
 
以上面约定的表为例:
select * from Person right join Address on Person.PersonID =
Address.PersonID;
执行结果如下:
一文搞懂SQL中的所有JOIN

文章插图
 
其过程参考下图理解:
一文搞懂SQL中的所有JOIN

文章插图
 
3. Full join:全连接,返回左表和右表所有的行,是左连接和右连接的集合 。如果其中一个表的数据在另外一个表中没有匹配的行,则返回null或者空 。
一文搞懂SQL中的所有JOIN

文章插图
 
以上面约定的表为例:
select * from Person full join Address on Person.PersonID = Address.PersonID;
执行结果如下:
一文搞懂SQL中的所有JOIN

文章插图
 
其过程参考下图理解:
一文搞懂SQL中的所有JOIN

文章插图
 
4. Inner join:内连接,选择左右关键字匹配上的行
一文搞懂SQL中的所有JOIN

文章插图
 
以下面给约定的表为例:
select * from Person inner join Address on Person.PersonID = Address.PersonID;
执行结果如下:
一文搞懂SQL中的所有JOIN

文章插图
 
其过程参考下图理解:
一文搞懂SQL中的所有JOIN

文章插图
【一文搞懂SQL中的所有JOIN】 
除过以上几种常见的join外,延伸的有以下几种用法
1)left join excluding inner join(左连接排除内连接结果):返回左表但右表没有关联数据的数据集 。
一文搞懂SQL中的所有JOIN

文章插图
 
以下面给约定的表为例:
select * from Person left join Address on Person.PersonID=Address.PersonID where Address.PersonID is null;
执行结果如下:
一文搞懂SQL中的所有JOIN

文章插图
 
其过程参考下图理解:
一文搞懂SQL中的所有JOIN

文章插图
 
2)right join excluding inner join:(右连接排除内连接结果):返回右表但左表没有关联数据的数据集 。
一文搞懂SQL中的所有JOIN

文章插图
 
以上面给约定的表为例子:
select * from Person right join Address on Person.PersonID=Address.PersonID where Person.PersonID is null;
执行结果如下:
一文搞懂SQL中的所有JOIN

文章插图
 
可以参考以下图形理解:


推荐阅读