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 操作,我們假設我們的 employeescustomers 表中存在一些假設欄位,如 first_namelast_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 行,因為如果你注意到 employeescustomers 表中都出現了“Martin Blank”這個名字。

但是,如果要保留重複的行,可以使用 ALL 關鍵字,如下所示:

SELECT first_name, last_name FROM employees 
UNION ALL
SELECT first_name, last_name FROM customers;