当前位置:Gxlcms > 数据库问题 > sql joins

sql joins

时间:2021-07-01 10:21:17 帮助过:3人阅读

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   并且   内存   

人气教程排行