news 2026/7/24 14:20:01

sql union 和 union all

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
sql union 和 union all

UNIONUNION ALL是 SQL 中用于合并两个或多个查询结果集的操作符。它们的基本作用相同,但在去重性能上有关键区别。


一、核心区别

特性UNIONUNION ALL
去重✅ 会去除重复行❌ 保留所有行(包括重复)
性能较慢(需要排序去重)更快(直接合并)
使用场景需要唯一结果集不关心重复 / 已知不会重复

记住一句话UNION ALL是直接拼接,UNION是拼接后再去重。


二、示例说明

假设有两张表:

表 A:

text

id | name ----|------ 1 | 张三 2 | 李四

表 B:

text

id | name ----|------ 2 | 李四 3 | 王五

UNION ALL(保留重复)

sql

SELECT id, name FROM A UNION ALL SELECT id, name FROM B;

结果:

text

1 | 张三 2 | 李四 2 | 李四 ← 重复保留 3 | 王五

UNION(去重)

sql

SELECT id, name FROM A UNION SELECT id, name FROM B;

结果:

text

1 | 张三 2 | 李四 3 | 王五

三、使用限制和注意事项

规则说明
列数必须相同所有查询的SELECT列数必须一致
列类型必须兼容对应列的数据类型必须能隐式转换
列名以第一个查询为准最终结果集的列名由第一个SELECT决定
ORDER BY只能放在最后不能对单个子查询排序,只能对整个结果集排序
LIMIT只能放在最后同上

四、常见写法

1. 合并查询结果

sql

SELECT id, name FROM table_a UNION ALL SELECT id, name FROM table_b ORDER BY id DESC; -- 对整个结果集排序

2. 合并后分页

sql

SELECT id, name FROM ( SELECT id, name FROM table_a UNION ALL SELECT id, name FROM table_b ) t LIMIT 10 OFFSET 0;

3. 组合UNIONWHERE

sql

SELECT id, name FROM table_a WHERE status = 1 UNION ALL SELECT id, name FROM table_b WHERE status = 1;

五、性能对比

操作执行计划
UNION ALL直接 Append(追加)结果集,最快
UNIONAppend + Sort + Unique(排序去重),多消耗 CPU 和内存

建议:如果确认数据不会重复,或者业务上允许重复,尽量使用UNION ALL


六、在 MyBatis-Plus / JPA 中使用

MyBatis-Plus(XML)

xml

<select id="unionExample" resultType="com.seazon.cloud.entity.Driver"> SELECT id, name FROM driver_info UNION ALL SELECT id, name FROM driver_history </select>

JPA(原生 SQL)

java

@Query(value = "SELECT id, name FROM driver_info " + "UNION ALL " + "SELECT id, name FROM driver_history", nativeQuery = true) List<Object[]> unionQuery();

七、UNIONJOIN的区别

对比UNIONJOIN
作用上下合并行左右关联列
结果行数增加列数增加
关联不需要关联条件需要ON条件

图示

text

UNION: JOIN: 表A 行 表A 列 表B 列 表A 行 → 表A 行 表B 行 ← 横向扩展 表B 行 ↑ 表A 行 表B 行 表B 行 纵向扩展

八、总结

需求推荐使用
结果集不允许重复UNION
结果集允许重复 / 已知无重复UNION ALL(优先)
需要排序ORDER BY放在最后
需要分页UNION再套一层LIMIT
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/24 14:19:55

Open-ultra智能路由代理:实现多LLM模型的动态选择与自我优化

如果你正在构建基于大语言模型的应用&#xff0c;可能已经遇到了一个典型困境&#xff1a;随着业务增长&#xff0c;你需要接入多个不同的LLM服务——可能是OpenAI GPT-4用于复杂推理&#xff0c;Claude用于长文本分析&#xff0c;本地部署的Llama用于成本敏感场景。但直接硬编…

作者头像 李华
网站建设 2026/7/24 14:19:40

TDA4VM外设信号深度解析:CPTS、PRU_ICSSG与MCASP硬件设计与软件配置实战

1. 项目概述与核心价值在嵌入式系统&#xff0c;尤其是像德州仪器TDA4VM这类高性能异构SoC的设计与开发中&#xff0c;硬件工程师和底层驱动开发者面临的最大挑战之一&#xff0c;就是如何从海量的数据手册引脚表中&#xff0c;快速、准确地理解每个外设接口的真正含义、连接方…

作者头像 李华
网站建设 2026/7/24 14:11:55

互联网大厂Java求职面试:从Spring Boot到微服务的幽默对话

互联网大厂Java求职面试&#xff1a;从Spring Boot到微服务的幽默对话在一次互联网大厂的Java求职面试中&#xff0c;面试官&#xff08;严肃的技术专家&#xff09;和候选人燕双非&#xff08;搞笑的水货程序员&#xff09;展开了一场有趣的对话。他们的讨论围绕着Java技术栈和…

作者头像 李华
网站建设 2026/7/24 14:08:01

YOLOv8小目标检测优化:工业质检实战

1. 项目背景与核心挑战去年夏天参与了一个工业质检项目&#xff0c;需要从高空拍摄画面中检测微小缺陷。当我把现成的YOLOv5模型直接套用上去时&#xff0c;recall值直接跌到30%以下——那些在2000万像素图像中只有2020像素左右的焊点缺陷&#xff0c;就像大海捞针一样难以捕捉…

作者头像 李华
网站建设 2026/7/24 14:06:55

知识库分块策略:全面对比与选型指南

问&#xff1a;做RAG知识库&#xff0c;分块大小设多少、overlap用多少、按什么规则切——网上的说法五花八门&#xff0c;到底有没有一个通用的标准&#xff1f;答&#xff1a;没有通用标准&#xff0c;但有几条经过反复验证的经验规则。分块策略的选择取决于文档类型和用户提…

作者头像 李华
网站建设 2026/7/24 14:03:59

高性能SAR ADC评估套件深度解析:从硬件设计到软件实操

1. 项目概述&#xff1a;从芯片到系统&#xff0c;如何用好一颗高性能SAR ADC 在精密数据采集系统的设计里&#xff0c;选型一颗合适的模数转换器&#xff08;ADC&#xff09;只是第一步。更关键、也往往更让工程师头疼的&#xff0c;是如何在真实的电路板上&#xff0c;验证这…

作者头像 李华