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的操做應該就徹底明白了。

更多參考資料

相關文章
相關標籤/搜索