16、UNION 合并多个select 查询结果集
1、UNION
是 SQL 中用于 合并多个查询结果集 的集合运算符。它将两个或多个 SELECT 语句的结果纵向拼接成一个结果集,并自动去除重复行(UNION ALL 不去重)。
SELECT column1, column2, ... FROM table1 UNION [ALL] -- 合并两个select 语句 SELECT column1, column2, ... FROM table2 [UNION [ALL] SELECT ...] [ORDER BY ...];
- 列数必须相同:每个
SELECT返回的列数要一致。 - 数据类型兼容:对应位置的列应具有兼容的数据类型(如
INT和BIGINT可兼容,但DATE和VARCHAR可能不行,取决于数据库)。 - 列的顺序必须一致:各
SELECT语句中列的顺序必须对应。 - 结果集的列名:来自第一个
SELECT 语句的列名。
employees_east:
| id | name |
|---|---|
| 1 | Alice |
| 2 | Bob |
employees_west:
| id | name |
|---|---|
| 2 | Bob |
| 3 | Carol |
语句1
SELECT name FROM employees_east UNION SELECT name FROM employees_west;
结果(Bob 只出现一次):
| name |
|---|
| Alice |
| Bob |
| Carol |
语句2
SELECT name FROM employees_east UNION ALL SELECT name FROM employees_west;
结果(保留重复):
| name |
|---|
| Alice |
| Bob |
| Bob |
| Carol |
UNION vs UNION ALL
| 运算符 | 是否去重 | 性能 | 用途 |
|---|---|---|---|
UNION |
✅ 去重 | 较慢(需排序/哈希去重) | 需要唯一结果时 |
UNION ALL |
❌ 保留重复 | 快 | 合并所有数据,包括重复行 |
例子:
表:US_Customers
| CustomerID | Name | Country |
|---|---|---|
| 1 | John Doe | USA |
| 2 | Jane Smith | USA |
表:EU_Clients
| ClientID | FullName | Nation |
|---|---|---|
| 101 | Hans Müller | Germany |
| 102 | Sophie Dubois | France |
SELECT CustomerID AS ID, Name AS CustomerName, Country FROM US_Customers UNION ALL SELECT ClientID, -- 这里没有别名 FullName, -- 列名不同 Nation -- 列名不同 FROM EU_Clients;
查询结果
| ID | CustomerName | Country |
|---|---|---|
| 1 | John Doe | USA |
| 2 | Jane Smith | USA |
| 101 | Hans Müller | Germany |
| 102 | Sophie Dubois | France |
本文来自博客园,作者:chao_xiong,转载请注明原文链接:https://www.cnblogs.com/chao-xiong/p/19242603

浙公网安备 33010602011771号