圖解 交集(join)和 合並(union)


假設我們有兩張表。

  • Table A 是左邊的表。
  • Table B 是右邊的表。

其各有四條記錄,其中有兩條記錄是相同的,如下所示:

id name       id  name

Pirate        1   Rutabaga

2  Monkey     2   Pirate

Ninja         3   Darth Vader

4  Spaghetti   4   Ninja

下面讓我們來看看不同的Join會產生什么樣的結果。

1、Inner join

SELECT * FROM TableA  INNER JOIN TableB   ON TableA.name = TableB.name

 結果集

(TableA.)       (TableB.)

id  name       id   name

1   Pirate     2    Pirate

3   Ninja      4    Ninja

Inner join 產生的結果集中,是A和B的交集

2.FULL [OUTER] JOIN

SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name

結果集
(TableA.)           (TableB.)

id    name         id       name

1     Pirate        2     Pirate

2     Monkey     null   null

3     Ninja         4      Ninja

4     Spaghetti  null   null

null  null           1     Rutabaga

null  null           3     Darth Vader

Full outer join 產生A和B的並集。但是需要注意的是,對於沒有匹配的記錄,則會以null做為值。可以使用IFNULL判斷。
注意:產生A表和B表都沒有出現的數據集
SELECT * FROM TableA  FULL OUTER JOIN TableB ON TableA.name = TableB.name
WHERE TableA.id IS null OR TableB.id IS null
 
3、LEFT [OUTER] JOIN
SELECT * FROM TableA  LEFT OUTER JOIN TableB ON TableA.name = TableB.name
結果集
(TableA.)           (TableB.)

id  name         id    name

1   Pirate        2     Pirate

2   Monkey     null  null

3   Ninja         4     Ninja

4   Spaghetti  null  null

注意:產生在A表中有而在B表中沒有的集合

SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name

WHERE TableB.id IS null

(TableA.)           (TableB.)

id  name       id     name

2   Monkey     null   null

4   Spaghetti  null   null

4、UNION 與 UNION ALL

UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的數據類型

UNION 只選取記錄,會選取不同的值;而UNION ALL會列出所有記錄,包括重復的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM