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

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
http://www.cnnetsun.cn/news/3620873.html

相关文章:

  • Open-ultra智能路由代理:实现多LLM模型的动态选择与自我优化
  • TDA4VM外设信号深度解析:CPTS、PRU_ICSSG与MCASP硬件设计与软件配置实战
  • 互联网大厂Java求职面试:从Spring Boot到微服务的幽默对话
  • YOLOv8小目标检测优化:工业质检实战
  • 知识库分块策略:全面对比与选型指南
  • 高性能SAR ADC评估套件深度解析:从硬件设计到软件实操
  • AI驱动的开源项目管理工具DooTask核心技术解析
  • 零基础玩转bWAPP靶场(十六):SQL 注入(POST/选择型)
  • OpenClaw智能体:多模态感知的水产知识引擎开发实践
  • 16位二进制加法器 Verilog Quartus
  • 适配 Microsoft 365 的内联邮件安全架构部署与风险防控研究
  • 把喇叭贴在麦克风边上,还能全双工通话?——AU-60把“不可能”变成了“常规操作”
  • 零基础用户必看:5款大模型工具实战指南
  • AI API 中转别只看能不能连通,先看第一次调用有没有“回执”
  • 同平台多账号怎么管:会话隔离的正确姿势
  • ADS7851EVM-PDK评估套件:一站式双通道同步采样ADC性能验证平台
  • 电商AI自动化:图片识别与文案生成技术实践
  • 2026 在线抠图工具实操指南,国内可用网页版与小程序整理,附免费额度与使用技巧
  • YOLOv8实例分割在管道缺陷检测中的应用与优化
  • 屑曾的ACM笔记(1)-位运算、线性基
  • 基于C++实现(控制台)景区旅游管理系统
  • AI工具设计师套装限时解密:仅开放72小时的完整配置包(含GPU适配参数+中文语境优化Prompt库+交付物自检SOP)
  • 工具调用是什么?AI 如何从“会说”变成“会做”
  • Google Agent技术解析:智能体架构与多模态任务链实战
  • DRA821U-Q1硬件设计指南:Fail-Safe IO与电源时序详解
  • 杰理之输出走iis, 蓝牙通话声音卡顿严重,甚至没有声音【篇】
  • 深入解析锁相环PLL架构与LMK05028时钟芯片设计实战
  • AI论文写作工具评测与宏智树核心优势解析
  • 大模型认知架构突破:WFA设计与贾子智慧理论实践
  • TAS3251音频放大器PLL时钟配置与音频接口实战指南