码迷,mamicode.com
首页 > 数据库 > 详细

sql joins

时间:2018-03-01 20:13:44      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:基础上   nbsp   gpo   post   选择   sql   body   并且   内存   

1 join的本质都是在计算两个表的笛卡尔乘积

就是A中的每一行和B中的每一行构成新的表中的一行。其它的join都是在这个表的基础上执行相应的操作。

inner join、full outer join、cross join在不加条件的时候,返回的是两个表的笛卡尔积。

2 inner join

在两个集合的笛卡尔积中选出满足条件的行出来。

where是隐式连接,inner join是显式连接,二者没有本质的区别。

3 outer join

3.1 full outer join

mysql不支持full join

首先,从笛卡尔积集合中选择出满足条件的行,然后列出两个集合中没有匹配上的行,对于没有匹配上的行,另外一个表中相应的列设置为NULL,也就是说,最终生成的表中包含了原来的表中的所有的行,只不过除了满足条件的笛卡尔积行外,还有没有匹配上的加了NULL的行。

3.2 left outer join

首先从笛卡尔积集合中选择出满足条件的行,然后列出前面一个表中没有被选出的所有的行,对应的列都设置为NULL。这样,最终生成的表中除了包含满足条件的笛卡尔积中的行,还包含了原来前面的表中的所有的行。

3.3 right outer join

首先从笛卡尔积集合中选择出满足条件的行,然后列出后面一个表中没有被选出的所有的行,对应的列都设置为NULL。这样,最终生成的表中除了包含满足条件的笛卡尔积中的行,还包含了原来后面的表中的所有的行。

4 cross join

两个集合的笛卡尔积,也可以加on,结果和inner join一样,但是cross join是先计算笛卡尔积,然后再根据条件选,更费时,并且耗内存,inner join直接选择,更优。

 

sql joins

标签:基础上   nbsp   gpo   post   选择   sql   body   并且   内存   

原文地址:https://www.cnblogs.com/hustdc/p/8488444.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!