SQL UNION 与 UNION ALL 的区别及用法详解

月亮慢半拍
月亮慢半拍
发布时间:2026-10-14| 5人浏览过
原创

SQL UNION 和 UNION ALL 是合并多个 SELECT 语句结果集的常用操作符。两者的核心区别在于是否处理重复数据:UNION 会自动去除重复行,适用于需要唯一值的场景;而 UNION ALL 则保留所有记录,性能通常更高但可能包含冗余数据。掌握其语法规范与应用场景,能有效优化数据库查询逻辑。

理解 SQL UNION 操作符

UNION 操作符的主要用途是将两个或多个 SELECT 语句的结果合并为一个结果集。在使用 UNION 时,必须严格遵守以下规则,否则查询将无法执行:

  1. 列数一致:每个 SELECT 语句中必须拥有相同数量的列。
  2. 数据类型兼容:对应位置的列必须拥有相似的数据类型(例如字符串对字符串,数字对数字)。
  3. 顺序相同:每条 SELECT 语句中列的排列顺序必须完全一致。
  4. 列名继承:最终结果集中的列名,默认采用第一个 SELECT 语句中的列名。

基本语法(去重):

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

理解 SQL UNION ALL 操作符

UNION ALL 的语法结构与 UNION 几乎相同,但它不会删除重复的行。如果两个结果集中存在相同的记录,它们都会出现在最终结果中。在数据量巨大且明确知道无重复或不需要去重时,使用 UNION ALL 能显著提升查询性能,因为它省去了排序和去重的开销。

基本语法(保留重复):

SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;

实战案例:合并员工名单

为了更直观地演示两者的差异,我们构建两个简单的员工表进行合并测试。

准备数据表

假设我们有两张分别存储中国和USA员工信息的表:

表一:Employees_China

  • E_ID: 01, E_Name: Zhang, Hua
  • E_ID: 02, E_Name: Wang, Wei
  • E_ID: 03, E_Name: Carter, Thomas
  • E_ID: 04, E_Name: Yang, Ming

表二:Employees_USA

  • E_ID: 01, E_Name: Adams, John
  • E_ID: 02, E_Name: Bush, George
  • E_ID: 03, E_Name: Carter, Thomas
  • E_ID: 04, E_Name: Gates, Bill

注意:两份名单中,"Carter, Thomas" 是重复出现的记录。

UNION 查询示例

执行以下语句合并两表中的姓名:

SELECT E_Name FROM Employees_China
UNION
SELECT E_Name FROM Employees_USA;

运行结果:系统会自动过滤掉重复的 "Carter, Thomas",最终返回 7 条唯一记录:

E_Name
Zhang, Hua
Wang, Wei
Carter, Thomas
Yang, Ming
Adams, John
Bush, George
Gates, Bill

UNION ALL 查询示例

将关键字改为 UNION ALL,其余保持不变:

SELECT E_Name FROM Employees_China
UNION ALL
SELECT E_Name FROM Employees_USA;

运行结果:系统保留所有原始数据,包括重复项。最终返回 8 条记录,"Carter, Thomas" 出现了两次:

E_Name
Zhang, Hua
Wang, Wei
Carter, Thomas
Yang, Ming
Adams, John
Bush, George
Carter, Thomas
Gates, Bill

如何选择?

在实际开发中,选择 UNION 还是 UNION ALL 取决于业务需求:

  • 如果你需要一份干净、无重复的列表(如生成唯一客户名单),请使用 UNION。
  • 如果你追求执行速度,或者你明确知道数据源之间没有重复,亦或是你需要统计所有发生的次数(不去重),请使用 UNION ALL。

以上就是SQL UNION和UNION ALL的详细使用方法与区别,更多关于SQL基础知识的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。