SQL 連接的集合論

在 SQL 中進行資料連接

Maham Faisal Khan

Senior Content Developer, DataCamp

維恩圖與集合論

三個維恩圖:UNION、INTERSECT、EXCEPT。UNION 為兩個重疊圓,整體填滿綠色。INTERSECT 只將重疊區域填綠。EXCEPT 僅左側與右側不重疊的部分為綠色。

在 SQL 中進行資料連接

維恩圖與集合論

三個維恩圖中有兩個淡化,僅 UNION 的圖聚焦。UNION 為兩個重疊圓,整體填滿綠色。

在 SQL 中進行資料連接

UNION 圖解

  • UNION 接受兩個資料表,回傳兩表的所有紀錄

兩個資料表(左、右)。右側示意對兩表做 UNION 後的結果。

在 SQL 中進行資料連接

UNION ALL 圖解

  • UNION ALL 接受兩個資料表,回傳兩表的所有紀錄,包含重複值

兩個資料表(左、右)。右側示意對兩表做 UNION ALL 後的結果。

在 SQL 中進行資料連接

UNION 與 UNION ALL 語法

UNION 語法

SELECT *
FROM left_table
UNION
SELECT *
FROM right_table;

UNION ALL 語法

SELECT *
FROM left_table
UNION ALL
SELECT *
FROM right_table;
在 SQL 中進行資料連接

UNION 與 UNION ALL 語法

兩個資料表(左、右)。右側示意對兩表做 UNION 後的結果。箭頭標示左右表需要相同欄數且欄位型別相同。

在 SQL 中進行資料連接

UNION 與 UNION ALL 語法

兩個資料表(左、右)。右側示意對兩表做 UNION 後的結果。箭頭標示左右表需相同欄數與型別。右側結果集顯示:欄位名稱沿用右表(即使有別名)。

在 SQL 中進行資料連接

看看 monarchs 資料表

SELECT *
FROM monarchs;
| country        | continent   | monarch                 |
|----------------|-------------|-------------------------|
| Brunei         | Asia        | Hassanal Bolkiah        |
| Oman           | Asia        | Haitham bin Tarik       |
| Norway         | Europe      | Harald V                |
| United Kingdom | Europe      | Charles III             |
在 SQL 中進行資料連接

總理們,來認識君主吧

SELECT monarch AS leader, country
FROM monarchs
UNION
SELECT prime_minister, country
FROM prime_ministers
ORDER BY country, leader
LIMIT 10;
在 SQL 中進行資料連接

UNION 之後

|-------------------------|----------------|
| leader                  | country        |
|-------------------------|----------------|
| Anthony Albanese        | Australia      |
| Hassanal Bolkiah        | Brunei         |
| Mostafa Madbouly        | Egypt          |
| Narendra Modi           | India          |
| Christopher Luxon       | New Zealand    |
| Harald V                | Norway         |
| Jonas Gahr Støre        | Norway         |
| Haitham bin Tarik       | Oman           |
| Shehbaz Sharif          | Pakistan       |
| Luís Montenegro         | Portugal       |
|-------------------------|----------------|
在 SQL 中進行資料連接

用 UNION ALL 彙整領袖

SELECT monarch AS leader, country
FROM monarchs
UNION ALL
SELECT prime_minister, country
FROM prime_ministers
ORDER BY leader, country
LIMIT 10;
在 SQL 中進行資料連接

UNION ALL 結果

| leader                  | country        |
|-------------------------|----------------|
| Anthony Albanese        | Australia      |
| Hassanal Bolkiah        | Brunei         |
| Hassanal Bolkiah        | Brunei         |
| Mostafa Madbouly        | Egypt          |
| Narendra Modi           | India          |
| Christopher Luxon       | New Zealand    |
| Harald V                | Norway         |
| Jonas Gahr Støre        | Norway         |
| Haitham bin Tarik       | Oman           |
| Haitham bin Tarik       | Oman           |
在 SQL 中進行資料連接

一起來練習吧!

在 SQL 中進行資料連接

Preparing Video For Download...