当前位置: 首页 > news >正文

SQL关键字三分钟入门:UNION 与 UNION ALL —— 数据合并全攻略

在处理数据时,有时我们需要将来自不同表或同一表的不同查询结果合并在一起。例如:

  • 合并两个部门的员工名单;
  • 将多个地区的销售数据汇总;
  • 显示某段时间内所有新增和修改的记录。

这时候,我们就需要用到 SQL 中非常强大的两个关键字 —— UNIONUNION ALL

它们可以帮助我们轻松地将多个查询结果集合并为一个结果集,但两者之间有一些关键的区别需要注意。


一、什么是 UNION 和 UNION ALL?

  • UNION:用于合并两个或多个 SELECT 语句的结果集,并自动去除重复行。
  • UNION ALL:也用于合并两个或多个 SELECT 语句的结果集,但它不会去除重复行。

你可以把它们理解为:“将不同的查询结果合并成一个大集合”。


二、基本语法

SELECT column1, column2, ...
FROM table1
UNION [ALL]
SELECT column1, column2, ...
FROM table2;
  • 必须保证每个 SELECT 语句中的列数相同,且对应列的数据类型兼容。
  • UNION 默认会去除重复行,而 UNION ALL 则保留所有行。

三、示例讲解

假设我们有两个表:employees_northemployees_south,分别存储了北部和南部地区员工的信息。

表:employees_north

idname
1张三
2李四

表:employees_south

idname
3王五
4李四

示例1:使用 UNION 合并两个表的数据(去重)

SELECT name FROM employees_north
UNION
SELECT name FROM employees_south;
结果:
name
张三
李四
王五

 这里使用 UNION 自动去除了重复的名字“李四”。


 示例2:使用 UNION ALL 保留所有数据(含重复)

SELECT name FROM employees_north
UNION ALL
SELECT name FROM employees_south;
结果:
name
张三
李四
王五
李四

 这里使用 UNION ALL 保留了所有的记录,包括重复的名字“李四”。


 示例3:结合 WHERE 和 ORDER BY 使用

-- 查找名字以“张”开头的所有员工,并按名字排序
(SELECT name FROM employees_north WHERE name LIKE '张%')
UNION
(SELECT name FROM employees_south WHERE name LIKE '张%')
ORDER BY name;
结果:
name
张三

先筛选出符合条件的记录,再进行合并并排序。


 示例4:多列合并(注意列数和顺序一致性)

假设我们有两张表 orders_2024orders_2025,结构如下:

表:orders_2024
order_idproductamount
1手机2999
2耳机499
表:orders_2025
order_idproductamount
3鼠标199
4键盘399
SELECT * FROM orders_2024
UNION ALL
SELECT * FROM orders_2025;
结果:
order_idproductamount
1手机2999
2耳机499
3鼠标199
4键盘399

 注意:UNIONUNION ALL 合并时,必须确保每个 SELECT 语句返回的列数一致,并且对应的列类型兼容。


注意

对比项UNIONUNION ALL
是否去重
性能较慢(需要额外的去重操作)更快
使用场景当你需要唯一值时当你不介意重复值时

⚠️ 注意:使用 UNION 时,数据库需要对结果集进行排序和去重,这可能会消耗更多资源。如果不需要去重,建议优先使用 UNION ALL 提高性能。


四、总结对比表

场景SQL 示例
合并两表数据(去重)SELECT name FROM table1 UNION SELECT name FROM table2;
合并两表数据(含重复)SELECT name FROM table1 UNION ALL SELECT name FROM table2;
多列合并SELECT col1, col2 FROM table1 UNION ALL SELECT col1, col2 FROM table2;
结合筛选条件(SELECT name FROM table1 WHERE condition) UNION (SELECT name FROM table2 WHERE condition)

相关文章:

  • RKNN开发环境搭建3-RKNN Model Zoo 板载部署以Whisper为例
  • pyqt 简单条码系统
  • OpenStack入门
  • 搭建简易采购系统:从需求分析到供应商数据库设计
  • 【第二章:机器学习与神经网络概述】01.聚类算法理论与实践-(2)层次聚类算法(Hierarchical Clustering)
  • 【对比】DeepAR 和 N-Beats
  • 【unitrix】 3.0 基本结构体(types.rs)
  • python 解码 jwt
  • javaweb -Ajax
  • LVS—DR模式
  • 最新FVCOM 潮流、波浪、泥沙、水质、温盐、染色剂、粒子示踪、嵌套、背景流、自动化全流程
  • 在线教育平台敏捷开发项目
  • CppCon 2017 学习:C++ in Academia
  • ModbusTcp使用
  • Qt事件处理机制
  • Transformer推理拓扑关系
  • 2025年06月18日Github流行趋势
  • Jenkins审核插件实战:实现流水线审批控制的最佳实践
  • 经典风格的免费wordpress模板
  • 网页后端开发(基础3--Springboot框架)
  • 婚恋交友网站建设方案/2021近期时事新闻热点事件简短
  • 网站后台怎样批量上传/b站视频推广网站
  • 淮安哪里有做网站的/互联网营销师国家职业技能标准
  • 有什么做ppt的网站吗/社群营销策略有哪些
  • 学校网站源码html/销售找客户最好的app
  • 汽车网站建设页面/成都网站建设方案服务