sql joins

Posted hustdc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql joins相关的知识,希望对你有一定的参考价值。

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的主要内容,如果未能解决你的问题,请参考以下文章

sql [sql技巧]一些sql技巧#sql

sql 2008 r2 在sql 2008上兼容么

SQL基础

有大神知道,sql server 中如何批量执行sql语句吗?

pl sql developer怎么执行sql

pl sql developer怎么执行sql