MySQL 中的 UNION 语句
文章目录
- 一、数据准备
- 一、UNION 和 UNION ALL
- 二、UNION 的执行顺序(UNION 和其他语句一同出现)
- 三、MySQL 使用 UNION(ALL) + ORDER 导致排序失效
- 四、UNION 报错语法
一、数据准备
-- 创建表
CREATE TABLE test_user (ID int(11) NOT NULL AUTO_INCREMENT,USER_ID int(11) DEFAULT NULL COMMENT '用户账号',USER_NAME varchar(255) DEFAULT NULL COMMENT '用户名',AGE int(5) DEFAULT NULL COMMENT '年龄',COMMENT varchar(255) DEFAULT NULL COMMENT '简介',PRIMARY KEY (ID)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;-- 数据插入语句
INSERT INTO test_user (ID, USER_ID, USER_NAME, AGE, COMMENT) VALUES ('1', '111', '开心菜鸟', '18', '今天很开心');
INSERT INTO test_user (ID, USER_ID, USER_NAME, AGE, COMMENT) VALUES ('2', '222', '悲伤菜鸟', '21', '今天很悲伤');
INSERT INTO test_user (ID, USER_ID, USER_NAME, AGE, COMMENT) VALUES ('3', '333', '认真菜鸟', '30', '今天很认真');
INSERT INTO test_user (ID, USER_ID, USER_NAME, AGE, COMMENT) VALUES ('4', '444', '高兴菜鸟', '18', '今天很高兴');
INSERT INTO test_user (ID, USER_ID, USER_NAME, AGE, COMMENT) VALUES ('5', '555', '严肃菜鸟', '21', '今天很严肃');
SELECT * FROM test_user u;

一、UNION 和 UNION ALL
UNION
连接数据集关键字,可以将两个查询结果集拼接为一个,会过滤掉相同的记录
UNION ALL
连接数据集关键字,可以将两个查询结果集拼接为一个,不会过滤掉相同的记录
-- 使用UNION
SELECT * FROM test_user u
UNION
SELECT * FROM test_user u;

使用 UNION ,可以看到查询结果只有 5 条数据。
-- 使用UNION ALL
SELECT * FROM test_user u
UNION ALL
SELECT * FROM test_user u;

使用 UNION ALL,可以看到查询结果有 10 条数据。
二、UNION 的执行顺序(UNION 和其他语句一同出现)
from—>on—>join—>where—>group by—>having+(聚合函数)—>select—>distinct—>UNION—>order by—>limit
UNION 的执行顺序在 ORDER BY 之前
请记住这个执行顺序,便可以知道 UNION 和其他语句一同出现的结果。
- UNION 和 WHERE 语句
-- 1、第二个子句中的 where 语句不能同时作用于两个select语句
-- 5 + 1,共计 6 条
SELECT *, 'table1' FROM test_user u
UNION ALL
SELECT *, 'table2' FROM test_user u WHERE AGE = 30;
UNION 在 where 之后,所以第二个表的WHERE先筛选后进行数据集拼接;

如果想要把 where 作用所有结果集,可以通过再嵌套一个 select 。
-- 1、第二个子句中的 where 语句不能同时作用于两个select语句
-- 1 + 1,共计 2 条
-- 写法 1
SELECT * FROM
(SELECT *, 'table1' FROM test_user u UNION ALLSELECT *, 'table2' FROM test_user u
) a
WHERE AGE = 30;
-- 或者使用写法 2
SELECT *, 'table1' FROM test_user u WHERE AGE = 30
UNION ALL
SELECT *, 'table2' FROM test_user u WHERE AGE = 30
;

- UNION 和 GROUP 语句
-- 2、第二个子句中的 group by 语句不能同时作用于两个select语句
-- 5 + 3,共计 8 条
SELECT *, 'table1' FROM test_user u
UNION ALL
SELECT *, 'table2' FROM test_user u GROUP BY AGE;
UNION 在 GROUP BY 之后,所以 table2 的 GROUP BY 先分组后进行数据集拼接;

2. UNION 和 HAVING 语句
-- 3、第二个子句中的 HAVING 语句不能同时作用于两个 select 语句
-- 5 + 1,共计 6 条
SELECT *, 'table1' FROM test_user u
UNION ALL
SELECT *, 'table2' FROM test_user u HAVING AGE = 30 ;
UNION 在 HAVING 之后,所以 table2 的 HAVING 先过滤后进行数据集拼接;

3. UNION 和 ORDER BY 语句
-- 4、第二个子句中的 order by 语句可以同时作用于两个select语句
-- 查询结果整体按照 age 进行了排序
SELECT *, 'table1' FROM test_user u
UNION ALL
SELECT *, 'table2' FROM test_user u ORDER BY AGE;
因为当 UNION(ALL)语句和 ORDER BY语句同时出现,UNION(ALL)语句先执行。

4. UNION 和 LIMIT 语句
-- 只有1条数据,因为LIMIT在UNION之后执行
SELECT *, 'table1' FROM test_user u
UNION ALL
SELECT *, 'table2' FROM test_user u limit 0,1;
只有1条数据,因为 LIMIT 在 UNION 之后执行。

- UNION 、 ORDER BY 和 LIMIT 语句
-- 5、第二个子句中的 order by ,LIMIT 语句同时作用于两个 select 语句 *********
-- 只有1条数据,age=30 UNION--->ORDER BY--->LIMIT
SELECT *, 'table1' FROM test_user u
UNION ALL
SELECT *, 'table2' FROM test_user u order by age desc limit 0,1;
先拼接数据集,在按照 age 排序,最后使用 LIMIT 。

三、MySQL 使用 UNION(ALL) + ORDER 导致排序失效
通过以下两种方式解决:
- 添加 LIMIT 字段
- 额外增加排序字段
- SQL 1 如下
SELECT * FROM test_user u ORDER BY AGE;

2. SQL 2 如下
SELECT * FROM test_user u ORDER BY AGE DESC;

3. 查询结果集
(SELECT *, 'table1' FROM test_user u ORDER BY AGE)
UNION ALL
(SELECT *, 'table2' FROM test_user u ORDER BY AGE DESC);
可以看到此时 ORDER BY 语句失效了。

原因:UNION(ALL) + 会使 ORDER 失效
- 解决办法(1): 添加 LIMIT
-- 都加上 LIMIT
( SELECT *, 'table1' FROM test_user u ORDER BY AGE limit 10)
UNION ALL
( SELECT *, 'table2' FROM test_user u ORDER BY AGE DESC limit 10)

最好的解决方案就是先查询后排序,避免上述情况发生。
- 解决办法(2) :添加额外的排序字段
select * from
(( SELECT *, 'table1' AS name, row_number() over(ORDER BY AGE ) AS rn FROM test_user u ) UNION ALL ( SELECT *, 'table2' AS name, row_number() over(ORDER BY AGE DESC) AS rn FROM test_user u )
) a
order by name, rn;
额外需要两个字段,通过 row_number() over(order by column)进行表内排序,再通过 name 字段进行表排序。

四、UNION 报错语法
1. ORDER BY 语法报错
-- 语法错误
SELECT *, 'table1' FROM test_user u ORDER BY AGE
UNION ALL
SELECT *, 'table2' FROM test_user u ORDER BY AGE DESC;
第一个 SELECT 语句也使用了 ORDER BY ,导致报错。

解决方案:第一个 SELECT 语句加上括号。
-- 语法正确
(SELECT *, 'table1' FROM test_user u ORDER BY AGE)
UNION ALL
SELECT *, 'table2' FROM test_user u ORDER BY AGE DESC;
加上括号后,虽然不再报错,但是第一个 SELECT 语句的排序失效。

那要是上下两个都加上括号呢?
-- 语法正确
(SELECT *, 'table1' FROM test_user u ORDER BY AGE)
UNION ALL
(SELECT *, 'table2' FROM test_user u ORDER BY AGE DESC);
语法不报错,但是两个排序都失效了。
原因大家也清楚,前面第三小节已经讲过了,UNION 在 ORDER BY 语句之前。

2. LIMIT 语法报错
同样对于 LIMIT 语句也是一样的。
-- 语法错误
SELECT *, 'table1' FROM test_user u limit 0,1
UNION ALL
SELECT *, 'table2' FROM test_user u limit 0,1;

解决方案:同样也是第一个 SELECT 语句加上括号。
-- 语法正确,1 条记录
(SELECT *, 'table1' FROM test_user u limit 0,1)
UNION ALL
SELECT *, 'table2' FROM test_user u limit 0,1;
此时语法正确,但只返回一行记录。

如果想要返回两条记录,就给第二个 SELECT 语句也加上括号。
-- 语法正确,2 条记录
(SELECT *, 'table1' FROM test_user u limit 0,1)
UNION ALL
(SELECT *, 'table2' FROM test_user u limit 0,1);

总结: UNION 后面执行的 ORDER BY,LIMIT 语句注意使用时要加括号,否则报错。
相关文章:
MySQL 中的 UNION 语句
文章目录一、数据准备一、UNION 和 UNION ALL二、UNION 的执行顺序(UNION 和其他语句一同出现)三、MySQL 使用 UNION(ALL) ORDER 导致排序失效四、UNION 报错语法一、数据准备 -- 创建表 CREATE TABLE test_user (ID int(11) NO…...
高完整性系统工程(三): Logic Intro Formal Specification
目录 1. Propositions 命题 2.1 Propositional Connectives 命题连接词 2.2 Variables 变量 2.3 Sets 2.3.1 Set Operations 2.4 Predicates 2.5 Quantification 量化 2.6 Relations 2.6.1 What Is A Relation? 2.6.2 Relations as Sets 2.6.3 Binary Relations as…...
【linux】多线程概念详述
文章目录一、线程基本概念1.1 进程地址空间与页表1.2 页表结构1.3 线程的理解1.3.1 如何描述线程1.4 再谈进程1.5 代码理解1.5.1 原生库提供线程pthread_create1.6 资源共享问题1.7 资源私有问题二、总结2.1 什么是线程2.2 并行与并发2.3 线程的优点2.4 线程的缺点2.5 线程异常…...
【Java】P8 面向对象(3)方法 基本知识
面向对象 方法方法方法的声明权限修饰符返回值类型方法名形参列表方法体简单案例方法 方法 是对类或对象行为特征的抽象,用来完成某个功能的操作。方法的目的 是为了实现代码复用,减少冗余,简化代码;方法不能独立存在,…...
js中null和undefined的区别
js中null和undefined的区别?这也是一个常见的js面试题 相同点 1,都是基本类型。 2,做判断值都是false。 !!null false // true !!undefined false // true不同点 1,诞生时间null在前,undefined在后。因为js作者Brendan-Eic…...
【Linux】linux中的c++怎么调试?gdb的介绍和使用。
背景1.1.前提知识程序的发布方式有两种,debug模式和release模式Linux gcc/g出来的二进制程序,默认是release模式 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项windows上的调试方法有区别吗?1.调试思路是一样的2…...
提升Python代码性能的六个技巧
文章目录前言为什么要写本文?1、代码性能检测1.1、使用 timeit 库1.2、使用 memory_profiler 库1.3、使用 line_profiler 库2、使用内置函数和库3、使用内插字符串 f-string4、使用列表推导式5、使用 lru_cache 装饰器缓存数据6、针对循环结构的优化7、选择合适算法…...
VI的常用命令
VI的常用命令 文章目录VI的常用命令vi/vim是什么?VI普通模式命令VI编辑模式命令VI指令模式vi/vim是什么? VI是Unix操作系统和类Unix操作系统中最通用的文本编辑器 VIM编辑器是从VI发展出来的一个性能更强大的文本编辑器。可以主动的将字体颜色辨别语法…...
【数据结构】万字深入浅出讲解单链表(附原码 | 超详解)
🚀write in front🚀 📝个人主页:认真写博客的夏目浅石. 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 📣系列专栏:C语言实现数据结构 💬总结:希望你看完…...
无线WiFi安全渗透与攻防(五)之aircrack-ng破解WEP加密
系列文章 无线WiFi安全渗透与攻防(一)之无线安全环境搭建 无线WiFi安全渗透与攻防(二)之打造专属字典 无线WiFi安全渗透与攻防(三)之Windows扫描wifi和破解WiFi密码 无线WiFi安全渗透与攻防(四)之kismet的使用 aircrack-ng破解WEP加密 1.WEP介绍 其实我们平常在使用wifi的时…...
MySQL中事务的相关问题
事务 一、事务的概述: 1、事务处理(事务操作):保证所有事务都作为一个工作单元来执行,即使出现了故障,都不能改变这种执行方式。当在一个事务中执行多个操作时,要么所有的事务都被提交(commit…...
推荐算法再次踩坑记录
去年搞通了EasyRec这个玩意,没想到今年还要用推荐方面的东西,行吧,再来一次,再次踩坑试试。1、EasyRec训练测试数据下载:git clone后,进入EasyRec,然后执行:bash scripts/init.sh 将…...
STM32 (十五)MPU6050
简介前言一、MPU6050简介MPU6050是一款性价比很高的陀螺仪,可以读取X Y Z 三轴角度,X Y Z 三轴加速度,还有内置的温度传感器,在姿态解析方面应用非常广泛。下面是它在淘宝上的参数图产品尺寸产品参数产品原理图:二、硬…...
使用yarn,依赖报各种错误怎么办
使用 yarn^3.x 版本时,默认并不会安装包到 node_modules,因为 yarn3.x 是即插即用的,也就是说如果你下载过这个包,yarn只会生成一个 Png文件,然后将包的路径 link 到下载过的地方,这样可以省去很多时间。而…...
面试官:rem和vw有什么区别
"rem" 和 "vw"的区别 "rem" 和 "vw" 都是用于网页设计的CSS单位。 "rem" 是相对于根元素的字体大小来计算的单位,即相对于 "html" 标签的字体大小。例如,如果 "html" 标签的字…...
【GPT-4】GPT-4 相关内容总结
目录 编辑 官网介绍 GPT-4 内容提升总结 GPT-4 简短版总结 GPT-4 基础能力 GPT-4 图像处理 GPT-4 技术报告 训练过程 局限性 GPT-4 风险和应对措施 开源项目:OpenAI Evals 申请 GPT-4 API API的介绍以及获取 官网介绍 官网:GPT-4 API候…...
5.springcloud微服务架构搭建 之 《springboot集成Hystrix》
1.springcloud微服务架构搭建 之 《springboot自动装配Redis》 2.springcloud微服务架构搭建 之 《springboot集成nacos注册中心》 3.springcloud微服务架构搭建 之 《springboot自动装配ribbon》 4.springcloud微服务架构搭建 之 《springboot集成openFeign》 目录 1.项目…...
【工作中问题解决实践 七】SpringBoot集成Jackson进行对象序列化和反序列化
去年10月份以来由于公司和家里的事情太多,所以一直没有学习,最近缓过来了,学习的脚步不能停滞啊。回归正题,其实前年在学习springMvc的时候也学习过Jackson【Spring MVC学习笔记 五】SpringMVC框架整合Jackson工具,但是…...
香港服务器遭受DDoS攻击后如何恢复运行?
您是否发现流量异常上升?您的网站突然崩溃了吗?当您注意到这些迹象时,可能是在陷入了DDoS攻击的困境,因而,当开始考虑使用香港服务器时,也应该考虑香港服务器设备受DDoS攻击时,如何从中恢复。 在 DDoS 攻击香港…...
【Hive】配置
目录 Hive参数配置方式 参数的配置方式 1. 文件配置 2. 命令行参数配置 3. 参数声明配置 配置源数据库 配置元数据到MySQL 查看MySQL中的元数据 Hive服务部署 hiveserver2服务 介绍 部署 启动 远程连接 1. 使用命令行客户端beeline进行远程访问 metastore服务 …...
深入理解STM32的FSMC:如何像操作SRAM一样轻松点亮你的TFTLCD屏幕
深入理解STM32的FSMC:如何像操作SRAM一样轻松点亮你的TFTLCD屏幕 在嵌入式开发领域,TFTLCD屏幕的驱动一直是让开发者又爱又恨的难题。传统的GPIO模拟时序方式虽然简单直接,但在高分辨率屏幕和复杂应用场景下往往力不从心。这时,S…...
告别时序烦恼:用Xilinx MIG IP核搞定FPGA DDR3内存接口(附MT41J256M16配置要点)
告别时序烦恼:用Xilinx MIG IP核搞定FPGA DDR3内存接口(附MT41J256M16配置要点) 在FPGA开发中,DDR3内存接口设计往往是让工程师头疼的难题之一。时序控制、信号完整性、配置参数选择,每一个环节都可能成为项目推进的拦…...
嵌入式系统开发实战:从架构设计到量产部署的工程指南
1. 从一场顶级技术盛会看嵌入式开发的演进与实战十多年前,也就是2010年的6月,芝加哥嵌入式系统大会(ESC Chicago)的第一天,被当时的媒体形容为“全明星阵容”的聚会。Dan Saks、Christian Legare、Bill Gatliff、David…...
2026年国民技术数字IC笔试试卷带答案
满分:100分 时间:90分钟 一、单选题(每题3分,共30分) 1. 在静态时序分析(STA)中,建立时间检查的公式为( ) A. Tclk + Tskew ≥ Tck-q + Tlogic + Tsetup B. Tclk - Tskew ≥ Tck-q + Tlogic + Tsetup C. Tclk ≥ Tck-q + Tlogic - Tsetup D. Tlogic ≥ Tsetup + Tho…...
“枯笔”“泼墨”“留白”在Midjourney中根本不存在?——资深数字书画师拆解6个被长期误用的东方美学关键词
更多请点击: https://intelliparadigm.com 第一章:东方美学与AI绘图的本质断层 气韵生动与像素采样的不可通约性 东方绘画传统以“气韵生动”为最高准则,强调笔意流转、留白呼吸、时间性观照与心手相忘的即兴生成。而当前主流AI绘图模型&am…...
从极坐标栅格到地面点云:一种基于坡度与邻域一致性的分割实践
1. 极坐标栅格构建:自动驾驶的"地面扫描仪" 想象你正在玩一款赛车游戏,车辆需要自动识别哪些是能开的平坦路面,哪些是必须绕开的障碍物。现实中自动驾驶车辆面临同样的挑战,而极坐标栅格就是它的"地面扫描仪"…...
iOS越狱防火墙ijfw:从网络流量监控到精细化应用管控实战
1. 项目概述与核心价值最近在折腾一个挺有意思的开源项目,叫ijfw,全称是iOS Jailbreak Firewall。顾名思义,这是一个专门为越狱后的iOS设备设计的防火墙工具。如果你和我一样,是个喜欢在iPhone上“折腾”的玩家,或者对…...
雨夜便利店的光,刚好够照亮你这一秒的疲惫
雨声比闹钟更懂你凌晨一点十七分,耳机里循环着一首没名字的 lo-fi beat,窗外的雨没停,也没下大,就那么轻轻敲着空调外机和生锈的铁皮棚。你站在楼道口犹豫要不要出门买泡面,其实不是饿,是心里空了一小块&am…...
Guitar Pro 8.1.5作为吉他爱好者的练琴神器,其跨平台支持与强大功能值得重点关注。本评测聚焦其核心优势与操作要点,为吉他学习者与原创音乐人提供高效解决方案。跨系统兼容性Guit
Guitar Pro 8.1.5作为吉他爱好者的练琴神器,其跨平台支持与强大功能值得重点关注。本评测聚焦其核心优势与操作要点,为吉他学习者与原创音乐人提供高效解决方案。跨系统兼容性 Guitar Pro 8.1.5同时支持macOS与Windows系统,mac用户无需转战Wi…...
C++智能指针详解:原理、使用及避坑指南
文章目录 前言 一、智能指针核心原理:RAII机制 二、C常用智能指针详解(重点掌握后两种) 三、智能指针高频坑点(重中之重) 四、三大智能指针对比(选择指南) 五、实战案例:智能指…...
