在平时的工作中,尤其是跟后台打交道的或多或少都会离不开数据库,而用的最多的就是对数据库执行查询操作。查询有涉及单表的,有涉及多表的,而一般分析数据最多的就是从多个表中获取县官数据,这里就涉及到连接。以前看过很多的官员SQL连接的介绍,一上来就会以数学集合的概念来说。这对于像我一样的数学小白菜来说,理解起来就如登天。今天就以图形化方式来把涉及到的SQL连接总结下。
建立两张表,表结构及数据如下
连接分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;
执行结果如下:
其过程参考下图理解:
除过以上几种常见的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;
执行结果如下:
可以参考以下图形理解:
3)full join exluding inner join(全连接排除内连接结果):返回所有左表和右表没有匹配的行。
以上面约定的表为例子:
select * from Person full join Address on Person.PersonID=Address.PersonID where Person.PersonID is null or Address.PersonID is null;
执行结果如下:
可以参考以下图形理解:
至此,SQL中常见的join就这些,而常用的就是左连接、右连接、全连接、内连接,掌握这几个,其他的都是衍生出来的。