SQL 基础教程
SQL 连接
SQL 高级教程
SQL 参考资料

SQL UNION 操作

在本教程中,您将学习如何组合两个或多个 SQL 查询的结果。

UNION 运算符

UNION 运算符用于将两个或多个 SELECT 查询的结果组合成一个结果集。 联合操作不同于使用结合来自两个表的列的连接。 union 操作通过将两个源表中的所有行放入一个结果表中来创建一个新表,并将这些行放在另一个表的顶部。

这些是使用 UNION 组合两个 SELECT 查询的结果集的基本规则:

  • 在所有查询中,列的数量和顺序必须相同。
  • 对应列的数据类型必须兼容。

当满足这些条件时,这些表是联合兼容的:

语法

UNION 的基本语法可以通过以下方式给出:

SELECT column_list FROM table1_name
UNION SELECT column_list FROM table2_name;

为了更好地理解联合操作,让我们假设一些假设字段,如 first_namelast_name 存在于我们的 employeescustomers 表中。 请注意,这些字段实际上并不存在于我们的 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"出现在两个 employeescustomers 表中。

但是,如果要保留重复的行,可以使用 ALL 关键字,如下所示:

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