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;