SQL UNION 操作
在本教程中,你將學習如何組合兩個或多個 SQL 查詢的結果。
UNION 運算子
UNION
運算子用於兩個或更多個的 SELECT
的查詢結果組合成單個結果集。union
操作與使用組合來自兩個表的列的連線不同。union
操作通過將兩個源表中的所有行放入單個結果表中,將行放在另一個上面來建立新表。
這些是使用 UNION
方法組合兩個 SELECT
查詢的結果集的基本規則 :
- 所有查詢中列的數量和順序必須相同。
- 相應列的資料型別必須相容。
滿足這些條件時,表是 union
相容的。
語法
基本語法 UNION
如下:
SELECT column_list FROM table1_name UNION SELECT column_list FROM table2_name ;
為了更好地理解 union 操作,我們假設我們的 employees 和 customers 表中存在一些假設欄位,如 first_name 和 last_name。請注意,這些欄位實際上並不存在於我們的 demo 資料庫表中。
Table: employees
+----+------------+-----------+--------+
| id | first_name | last_name | salary |
+----+------------+-----------+--------+
| 1 | Ethan | Hunt | 5000 |
| 2 | Tony | Montana | 6500 |
| 3 | Sarah | Connor | 8000 |
| 4 | Rick | Deckard | 7200 |
| 5 | Martin | Blank | 5600 |
+----+------------+-----------+--------+
Table: customers
+----+------------+-----------+----------+
| id | first_name | last_name | city |
+----+------------+-----------+----------+
| 1 | Maria | Anders | Berlin |
| 2 | Fran | Wilson | Madrid |
| 3 | Dominique | Perrier | Paris |
| 4 | Martin | Blank | Turin |
| 5 | Thomas | Hardy | Portland |
+----+------------+-----------+----------+
讓我們執行一個聯合操作來組合兩個查詢的結果。
以下語句返回所有客戶和員工的名字和姓氏:
SELECT first_name, last_name FROM employees
UNION
SELECT first_name, last_name FROM customers;
執行上述語句後,結果集將如下所示:
+---------------+--------------+
| first_name | last_name |
+---------------+--------------+
| Ethan | Hunt |
| Tony | Montana |
| Sarah | Connor |
| Rick | Deckard |
| Martin | Blank |
| Maria | Anders |
| Fran | Wilson |
| Dominique | Perrier |
| Thomas | Hardy |
+---------------+--------------+
預設情況下,UNION
操作會從組合結果集中刪除重複的行。這就是為什麼上面的查詢只返回 9 行,因為如果你注意到 employees 和 customers 表中都出現了“Martin Blank”這個名字。
但是,如果要保留重複的行,可以使用 ALL
關鍵字,如下所示:
SELECT first_name, last_name FROM employees
UNION ALL
SELECT first_name, last_name FROM customers;