SQL的JOIN语法解析(inner join, left join, right join, full outer join的区别)

四种JOIN的使用/区别描述

left join 会从左表(shop)那里返回全部的记录,即便在右表(sale_detail)中没有匹配的行。 right outer join 右链接,返回右表中的全部记录,即便在左表中没有记录与它匹配 full outer join 全链接,返回左右表中的全部记录 在表中存在至少一个匹配时,inner join 返回行。 关键字inner可省略。

具体能够看stackoverflow上,Difference between Inner Join & Full join这个问题,说得蛮清楚的,我就搬运一下这个问题的答案好了。spa

JOIN

一共有三种OUTER JOIN:code

  • LEFT OUTER JOIN
  • RIGHT OUTER JOIN
  • FULL OUTER JOIN

关键字OUTER是可选择的,取决于具体语言,在实现上它们都是遵循标准的,所以FULL JOINFULL OUTER JOIN是同样的。blog

接着将以简化的数据集来讲明这些JOIN语句。考虑有以下两个数据集,注意到有些元素在A中有,在B中没有,反过来也是。图片

Set "A"    Set "B" AA BB --------   -------- Item 1     Item 3 Item 2     Item 4 Item 3     Item 5 Item 4     Item 6

LEFT OUTER JOIN

如今执行以下SQL语句(左链接,LEFT OUTER JOIN):ip

SELECT * FROM A LEFT OUTER JOIN B ON AA = BB

将会获得以下的结果(空白的元素表示NULL):get

AA BB --------   -------- Item 1 Item 2 Item 3     Item 3 Item 4     Item 4

左链接(LEFT OUTER JOIN)会输出左边的表中的全部结果,若是右边的表中有相应项,则会输出,不然为NULLio

所以,若是要找出在AA(左边的表)中有,而在BB(右边的表)中没有的数据项,能够使用以下的SQL语句:class

SELECT * FROM A LEFT OUTER JOIN B ON AA = BB WHERE BB is NULL

RIGHT OUTER JOIN

若是使用右链接,结果将会输出BB中全部的数据项和AA中相应的匹配项(注意你如今是获取了右边的表中的全部数据项):im

SELECT * FROM A RIGHT OUTER JOIN B ON AA = BB AA BB --------   -------- Item 3     Item 3 Item 4     Item 4 Item 5 Item 6

FULL OUTER JOIN

若是想要取得全部的元素项,则能够使用FULL JOIN:stackoverflow

SELECT * FROM A FULL JOIN B ON AA = BB AA BB --------   -------- Item 1            <-----+ Item 2                  | Item 3     Item 3       | Item 4     Item 4       | Item 5       +--- empty holes are NULL's
            Item 6       |
   ^                     |
   |                     |
   +---------------------+

再次注意,缺失的数据项的值是NULL

INNER JOIN

INNER JOINJOIN是同样的,通常INNER关键字能够省略。INNER JOIN将只会返回相匹配的元素项,即不会返回结果为NULL的数据项。

SELECT * FROM A INNER JOIN B ON AA = BB AA BB --------   -------- Item 3     Item 3 Item 4     Item 4

CROSS JOIN

最后还有一个CROSS JOIN,笛卡儿积,将会返回A中每一个元素分别匹配B中全部元素的结果,即N*M组合。

SELECT * FROM A CROSS JOIN B AA BB --------   -------- Item 1     Item 3      ^ Item 1     Item 4      +--- A中第一个元素, 匹配B中全部元素 Item 1     Item 5      | Item 1     Item 6 v Item 2     Item 3      ^ Item 2     Item 4      +--- A中第二个元素, 匹配B中全部元素 Item 2     Item 5      | Item 2     Item 6 v Item 3     Item 3 ... and so on Item 3     Item 4 Item 3     Item 5 Item 3     Item 6 Item 4     Item 3 Item 4     Item 4 Item 4     Item 5 Item 4     Item 6

图解SQL的JOIN操做

这边也有一张图清楚的说明了每一个JOIN操做。建议把上面的内容浏览一边后,再好好看下这张图片,相信对JOIN的操做应该就彻底明白了。

更多参考资料

相关文章
相关标签/搜索