leftjoin左表百万数据查询慢_⼀⽂搞懂SQL中的所有JOIN(献
给数据⼩⽩的我)
前⾔
在平时的⼯作中,尤其是跟后台打交道的或多或少都会离不开数据库,⽽⽤的最多的就是对数据库执⾏查询操作。查询有涉及单表的,有涉及多表的,⽽⼀般分析数据最多的就是从多个表中获取县官数据,这⾥就涉及到连接。以前看过很多的官员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:内连接,选择左右关键字匹配上的⾏
以下⾯给约定的表为例:
sql left 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就这些,⽽常⽤的就是左连接、右连接、全连接、内连接,掌握这⼏个,其他的都是衍⽣出来的。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。