<返回更多

一文搞懂SQL中的所有JOIN

2020-01-03    
加入收藏

前言

在平时的工作中,尤其是跟后台打交道的或多或少都会离不开数据库,而用的最多的就是对数据库执行查询操作。查询有涉及单表的,有涉及多表的,而一般分析数据最多的就是从多个表中获取县官数据,这里就涉及到连接。以前看过很多的官员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(献给数据小白的我)

 

除过以上几种常见的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(献给数据小白的我)

 

可以参考以下图形理解:

一文搞懂SQL中的所有JOIN(献给数据小白的我)

 

3)full join exluding inner join(全连接排除内连接结果):返回所有左表和右表没有匹配的行。

 

一文搞懂SQL中的所有JOIN(献给数据小白的我)

 

以上面约定的表为例子:

select * from Person full join Address on Person.PersonID=Address.PersonID where Person.PersonID is null or Address.PersonID is null;

执行结果如下:

一文搞懂SQL中的所有JOIN(献给数据小白的我)

 

可以参考以下图形理解:

一文搞懂SQL中的所有JOIN(献给数据小白的我)

 

至此,SQL中常见的join就这些,而常用的就是左连接、右连接、全连接、内连接,掌握这几个,其他的都是衍生出来的。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>