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:

idname
1 Alice
2 Bob

employees_west:

idname
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

 
CustomerIDNameCountry
1 John Doe USA
2 Jane Smith USA

表:EU_Clients

 
ClientIDFullNameNation
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;

查询结果

IDCustomerNameCountry
1 John Doe USA
2 Jane Smith USA
101 Hans Müller Germany
102 Sophie Dubois France

 

posted @ 2025-11-19 15:11  chao_xiong  阅读(9)  评论(0)    收藏  举报