前言在平时的工作中,尤其是跟后台打交道的或多或少都会离不开数据库,而用的最多的就是对数据库执行查询操作 。查询有涉及单表的,有涉及多表的,而一般分析数据最多的就是从多个表中获取县官数据,这里就涉及到连接 。以前看过很多的官员SQL连接的介绍,一上来就会以数学集合的概念来说 。这对于像我一样的数学小白菜来说,理解起来就如登天 。今天就以图形化方式来把涉及到的SQL连接总结下 。
约定建立两张表,表结构及数据如下
文章插图
常用join汇总
文章插图
连接分inner join(内连接)、outer join(外连接)、cross join(笛卡儿积) 。外连接又分左外连接(左连接):left join,右外连接(右连接):right join,全外连接(全连接):full join 。下面一一进行说明:
1. Left join:左连接,顾名思义就是返回左表的所有行和匹配的右表的行,如果没有匹配上就为null或者空 。
文章插图
以上面约定的表为例:
select * from Person left join Address on Person.PersonID = Address.PersonID;
执行结果如下:
文章插图
其过程参考下图理解:
文章插图
2. Right join:右连接,返回右表所有的行和匹配的左表的行,如果没有匹配上用null或者空 。
文章插图
以上面约定的表为例:
select * from Person right join Address on Person.PersonID =
Address.PersonID;
执行结果如下:
文章插图
其过程参考下图理解:
文章插图
3. Full join:全连接,返回左表和右表所有的行,是左连接和右连接的集合 。如果其中一个表的数据在另外一个表中没有匹配的行,则返回null或者空 。
文章插图
以上面约定的表为例:
select * from Person full join Address on Person.PersonID = Address.PersonID;
执行结果如下:
文章插图
其过程参考下图理解:
文章插图
4. Inner join:内连接,选择左右关键字匹配上的行
文章插图
以下面给约定的表为例:
select * from Person inner join Address on Person.PersonID = Address.PersonID;
执行结果如下:
文章插图
其过程参考下图理解:
文章插图
【一文搞懂SQL中的所有JOIN】
除过以上几种常见的join外,延伸的有以下几种用法
1)left join excluding inner join(左连接排除内连接结果):返回左表但右表没有关联数据的数据集 。
文章插图
以下面给约定的表为例:
select * from Person left join Address on Person.PersonID=Address.PersonID where Address.PersonID is null;
执行结果如下:
文章插图
其过程参考下图理解:
文章插图
2)right join excluding inner join:(右连接排除内连接结果):返回右表但左表没有关联数据的数据集 。
文章插图
以上面给约定的表为例子:
select * from Person right join Address on Person.PersonID=Address.PersonID where Person.PersonID is null;
执行结果如下:
文章插图
可以参考以下图形理解:
推荐阅读
- 如何解决网站访问慢-MySQL负载高
- MySQL, PostgreSQL CentOS常用数据库安装和python使用
- 程序员该如何进行 SQL 数据库的优化?
- PostgreSQL的几种分布式架构对比
- 一口气搞懂“质量”
- Docker 安装 Nginx、PHP、MySQL、Tomcat、Python、Redis、Apache
- SQL优化技巧总结,及案例分析
- 一条SQL搞定数据库设计文档
- 一文读懂Socket通信原理
- MySQL 8.0:字符集从 utf8 转换成 utf8mb4