sql中的并(UNION)、交(INTERSECT)、差(MINUS)
这三个操作是 SQL 中处理“数据集之间关系”的核心本质是对两个查询结果集做集合运算类似数学中的并集、交集、差集核心要求两个结果集的字段数、字段类型、字段顺序必须完全一致。先准备两张结构完全相同的测试表方便示例理解-- 表A一班学生CREATETABLEclass_a(idINT,nameVARCHAR(20));INSERTINTOclass_aVALUES(1,张三),(2,李四),(3,王五);-- 表B二班学生和一班有重叠CREATETABLEclass_b(idINT,nameVARCHAR(20));INSERTINTOclass_bVALUES(2,李四),(3,王五),(4,赵六);一、并UNION / UNION ALL合并两个结果集1. 核心定义UNION合并两个结果集自动去重删除重复行UNION ALL合并两个结果集保留所有行包括重复性能更高优先用。2. 语法与示例-- 1. UNION去重合并一班和二班学生重复的只保留一次SELECTid,nameFROMclass_aUNIONSELECTid,nameFROMclass_b;-- 结果4行去重/* id | name 1 | 张三 2 | 李四 3 | 王五 4 | 赵六 */-- 2. UNION ALL不去重保留所有行包括重复的李四、王五SELECTid,nameFROMclass_aUNIONALLSELECTid,nameFROMclass_b;-- 结果6行保留重复/* id | name 1 | 张三 2 | 李四 3 | 王五 2 | 李四 3 | 王五 4 | 赵六 */3. 关键注意事项必须保证两个查询的字段数、类型、顺序一致如不能一个查2字段一个查3字段性能UNION ALL无需去重性能远高于UNION能确定无重复时优先用 UNION ALL排序可在最后加ORDER BY对合并后的结果排序示例SELECTid,nameFROMclass_aUNIONALLSELECTid,nameFROMclass_bORDERBYidDESC;二、交INTERSECT取两个结果集的交集1. 核心定义返回两个结果集中同时存在的行即“既在A里又在B里”类似数学中的交集。2. 语法与注意事项⚠️MySQL 原生不支持 INTERSECT 关键字需用IN/EXISTS/JOIN模拟PostgreSQL、Oracle 等支持。方式1用 JOIN 模拟推荐性能优-- 取一班和二班的共同学生李四、王五SELECTa.*FROMclass_a aJOINclass_b bONa.idb.idANDa.nameb.name;-- 结果/* id | name 2 | 李四 3 | 王五 */方式2用 IN 模拟简单适合小表SELECT*FROMclass_aWHERE(id,name)IN(SELECTid,nameFROMclass_b);方式3用 EXISTS 模拟适合大表SELECT*FROMclass_a aWHEREEXISTS(SELECT1FROMclass_b bWHEREa.idb.idANDa.nameb.name);三、差MINUS / EXCEPT取两个结果集的差集1. 核心定义返回“在A里但不在B里”的行左差集或“在B里但不在A里”的行右差集。MINUSOracle 关键字EXCEPTPostgreSQL、SQL Server 关键字⚠️MySQL 原生不支持 MINUS/EXCEPT需用LEFT JOIN IS NULL模拟。2. 语法与示例示例1左差集仅在一班不在二班-- 取“只在一班”的学生张三SELECTa.*FROMclass_a aLEFTJOINclass_b bONa.idb.idANDa.nameb.nameWHEREb.idISNULL;-- 结果/* id | name 1 | 张三 */示例2右差集仅在二班不在一班-- 取“只在二班”的学生赵六SELECTb.*FROMclass_a aRIGHTJOINclass_b bONa.idb.idANDa.nameb.nameWHEREa.idISNULL;-- 结果/* id | name 4 | 赵六 */四、核心对比表操作含义MySQL 支持情况核心特点UNION并集去重原生支持自动去重性能稍差UNION ALL并集不去重原生支持保留所有行性能最优INTERSECT交集不支持需用 JOIN/IN/EXISTS 模拟仅返回共同行MINUS/EXCEPT差集不支持需用 LEFT JOIN 模拟仅返回“只在A/只在B”的行五、避坑关键字段一致性所有集合操作必须保证两个结果集的字段数、类型、顺序完全一致否则报错NULL 值处理NULL 不参与集合匹配如NULL NULL为 false需用IS NULL单独判断性能优先并集优先用UNION ALL而非UNION交集/差集大表用JOIN/EXISTS小表用INMySQL 替代方案记牢“交集用 JOIN差集用 LEFT JOIN IS NULL”这是 MySQL 中最通用的写法。总结UNION/UNION ALL合并结果集UNION 去重、UNION ALL 保留所有行性能优MySQL 原生支持INTERSECT交集取共同行MySQL 需用 JOIN/IN/EXISTS 模拟MINUS/EXCEPT差集取“仅在A/仅在B”的行MySQL 需用 LEFT JOIN IS NULL 模拟核心前提所有集合操作的两个结果集必须字段数、类型、顺序一致。这些集合操作是 SQL 数据分析的常用工具尤其在报表统计、数据对比场景中高频使用重点掌握 MySQL 的替代实现方式即可。

相关新闻

OpCore Simplify:自动化OpenCore EFI生成的黑苹果解决方案

OpCore Simplify:自动化OpenCore EFI生成的黑苹果解决方案

OpCore Simplify:自动化OpenCore EFI生成的黑苹果解决方案 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 解决黑苹果配置难题的智能工具全…

2026/7/4 13:28:49 阅读更多 →
数据管理革新:Obsidian知识系统中的一体化电子表格解决方案

数据管理革新:Obsidian知识系统中的一体化电子表格解决方案

数据管理革新:Obsidian知识系统中的一体化电子表格解决方案 【免费下载链接】obsidian-spreadsheets 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-spreadsheets 在当今信息爆炸的时代,研究者、学习者和职场人士每天都在处理大量数据。…

2026/7/4 23:39:30 阅读更多 →
RevokeMsgPatcher防撤回工具深度评测:从故障诊断到代码级解决方案

RevokeMsgPatcher防撤回工具深度评测:从故障诊断到代码级解决方案

RevokeMsgPatcher防撤回工具深度评测:从故障诊断到代码级解决方案 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: https:/…

2026/7/4 23:45:04 阅读更多 →

最新新闻

基于YOLOv10的红外目标检测实战指南

基于YOLOv10的红外目标检测实战指南

1. 项目背景与核心价值去年夏天,我在参与一个山区救援项目时,亲眼目睹了传统无人机监控系统的局限性。在浓烟和夜间环境下,普通摄像头完全失效,而热成像设备虽然能捕捉到热源,却无法准确识别是人、动物还是车辆。正是这…

2026/7/5 12:51:58 阅读更多 →
AIAgent之工具调用:Function Call 与 Tool Use

AIAgent之工具调用:Function Call 与 Tool Use

工具调用:Function Call 与 Tool Use工具调用是 Agent 的「手」,让大模型能操作外部世界。这篇讲 Function Calling 的原理、工具怎么定义、模型怎么选工具、参数怎么传、常见的工具类型,以及开发中的最佳实践。大家好,我是黒漂技…

2026/7/5 12:49:55 阅读更多 →
ICM-42688-P与STM32F746ZG在工业自动化中的应用

ICM-42688-P与STM32F746ZG在工业自动化中的应用

1. ICM-42688-P与STM32F746ZG的黄金组合解析 在工业自动化和机器人控制领域,传感器与微控制器的协同设计直接决定了系统的性能上限。ICM-42688-P作为TDK InvenSense推出的6轴MEMS运动传感器,与STMicroelectronics的STM32F746ZG Cortex-M7微控制器形成的硬…

2026/7/5 12:47:54 阅读更多 →
混合整数二次规划在模型预测控制中的应用与求解器对比

混合整数二次规划在模型预测控制中的应用与求解器对比

1. 混合整数二次规划在模型预测控制中的核心作用 混合整数二次规划(MIQP)作为模型预测控制(MPC)中处理离散决策变量的关键技术,其核心价值在于平衡计算复杂度和控制性能。在车辆动力系统控制这类典型应用中,变速箱档位选择、发动机启停等离散决策变量与连…

2026/7/5 12:47:54 阅读更多 →
YOLO实战避坑指南:从环境配置到部署落地的完整工程化流程

YOLO实战避坑指南:从环境配置到部署落地的完整工程化流程

如果你在 2024 年或 2025 年才开始接触 YOLO,可能会觉得它已经是一个“古老”且“成熟”的技术栈,网上教程遍地都是,随便找个代码跑起来似乎并不难。但当你真正想把它用起来,无论是做一个毕业设计、一个内部工具,还是想…

2026/7/5 12:45:54 阅读更多 →
RT-DETR实战:从原理到部署,掌握实时目标检测新范式

RT-DETR实战:从原理到部署,掌握实时目标检测新范式

如果你正在为毕业设计、学术论文或者项目选型而纠结,面对目标检测领域两大主流技术路线——YOLO系列和DETR系列——不知道该如何选择,那么这篇文章就是为你准备的。这不仅仅是“YOLO vs DETR”的简单对比,更是一个关于技术范式、工程实践和未…

2026/7/5 12:45:54 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻