SQL零基础入门教程,贼拉详细!贼拉简单! 速通数据库期末考!(九)

UNION ALL

UNION ALL 用于合并两个或多个 SELECT 语句的结果

请注意,UNION ALL 合并的每个 SELECT 语句必须是查询相同数量,相同数据类型的字段,且顺序也必须一致 。另外结果集中的列名总是等于 UNION ALL 中第一个 SELECT 语句中的列名

语法:

sql 复制代码
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;

示例:

从students学生数据表查询理科三班和文科三班的学生id,学生姓名,班级

写法一:

使用我们之前的学习的 WHERE ... IN ... 方式:

sql 复制代码
SELECT id,name,clazz
FROM students
WHERE clazz IN ('理科三班','文科三班');

写法二:

使用 UNION ALL 结合两个 SELECT 查询的方式:

sql 复制代码
SELECT id,name,clazz
FROM students
WHERE clazz = '理科三班'
UNION ALL
SELECT id,name,clazz
FROM students
WHERE clazz = '文科三班';

观察这两种写法的结果,写法一的结果中理科三班和文科三班的数据行是交错分布的,但是写法二的结果明显是分别从students表中查询出两部分结果,再纵向拼接而成的,这也是使用 UNION ALL的前提是每个SELECT查询的字段完全一致的原因。

带有 ORDER BY 的 UNION ALL

思考一个问题,如果我希望在 UNION ALL 后的结果中进行排序操作,那是不是每个 SELECT 语句都要加 ORDER BY 呢?

来测试一下:

从students学生数据表查询理科三班和文科三班的学生id,学生姓名,班级,并且按学生ID升序排列

错误写法:

sql 复制代码
SELECT id,name,clazz
FROM students
WHERE clazz = '理科三班'
ORDER BY id
UNION ALL
SELECT id,name,clazz
FROM students
WHERE clazz = '文科三班'
ORDER BY id;

很明显,这种写法是不行的,报错 Incorrect usage of UNION and ORDER BY,意思为 不正确地使用UNION和ORDER BY

正确写法:

sql 复制代码
SELECT id,name,clazz
FROM students
WHERE clazz = '理科三班'
UNION ALL
SELECT id,name,clazz
FROM students
WHERE clazz = '文科三班'
ORDER BY id;

使用UNION命令时需要注意,只能在最后使用一个ORDER BY命令,是将两个查询结果合在一起之后,再进行排序!

UNION

UNION 同样用于合并两个或多个 SELECT 语句的结果 。与 UNION ALL 唯一不同的地方在于 UNION 对查询结果进行去重操作,对所有重复出现的相同数据行只保留一行结果,其用法与 UNION ALL 完全一致。

此处不再过多赘述,大家自己尝试一下即可。

本专栏将持续更新,对数据库SQL感兴趣的同学可以关注一下,谢谢!

相关推荐
sensen_kiss1 小时前
CPT304 SoftwareEngineeringII 软件工程 2 Pt.8 软件测试 (Software Testing)(上)
学习·软件工程
力学与人工智能1 小时前
PPT分享 | 洛桑联邦理工学院魏震:深度几何学习在工业设计优化中的应用
学习·优化·工业设计·深度几何学习·洛桑联邦理工学院
流星白龙1 小时前
【MySQL高阶】26.事务(1)
数据库·mysql
三十..2 小时前
Redis 核心原理与高可用架构实践
运维·数据库·redis
这个DBA有点耶2 小时前
索引优化深潜(下):索引合并、ICP 与索引设计的实战法则
数据库·mysql·架构
努力努力再努力wz3 小时前
【内存管理与高并发内存池系列】从 mmap 到 malloc:文件映射、匿名映射与 glibc 内存分配机制详解
linux·c语言·数据结构·数据库·c++·qt·链表
Theo·Chan3 小时前
机房断电搞崩服务器 | 人大金仓 V8 全量备份跨实例完整恢复实录
sql·信创·kingbase·金仓
sensen_kiss3 小时前
CPT304 SoftwareEngineeringII 软件工程 2 Pt.9 软件测试 (Software Testing)(下)
学习·软件工程
JdSnE27zv3 小时前
Qt 操作SQLite数据库
数据库·qt·sqlite
wu_ye_m3 小时前
学习c语言第35天 函数声明和定义
c语言·开发语言·学习