SQL UNION 操作
在本教程中,您将学习如何组合两个或多个 SQL 查询的结果。
UNION 运算符
UNION
运算符用于将两个或多个 SELECT
查询的结果组合成一个结果集。 联合操作不同于使用结合来自两个表的列的连接。 union 操作通过将两个源表中的所有行放入一个结果表中来创建一个新表,并将这些行放在另一个表的顶部。
这些是使用 UNION
组合两个 SELECT
查询的结果集的基本规则:
- 在所有查询中,列的数量和顺序必须相同。
- 对应列的数据类型必须兼容。
当满足这些条件时,这些表是联合兼容的:
语法
UNION
的基本语法可以通过以下方式给出:
SELECT
UNION SELECT
column_list
FROM table1_name
UNION SELECT
column_list
FROM table2_name
;
为了更好地理解联合操作,让我们假设一些假设字段,如 first_name 和 last_name 存在于我们的 employees 和 customers 表中。 请注意,这些字段实际上并不存在于我们的 demo 数据库表中。
+----+------------+-----------+--------+ | 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 | +----+------------+-----------+--------+ |
+----+------------+-----------+----------+ | 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 | +----+------------+-----------+----------+ |
|
表: employees |
表: customers |
让我们执行一个联合操作来组合两个查询的结果。
以下语句返回所有客户和员工的名字和姓氏:
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 行的原因,因为如果您注意到名称"Martin Blank"出现在两个 employees 和 customers 表中。
但是,如果要保留重复的行,可以使用 ALL
关键字,如下所示:
SELECT first_name, last_name FROM employees
UNION ALL
SELECT first_name, last_name FROM customers;
Advertisements