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

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

UNION ALL

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

语法:

SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;

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

写法一:
使用我们之前的学习的 WHERE … IN … 方式:

SELECT id,name,clazz
FROM students
WHERE clazz IN ('理科三班','文科三班');

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

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升序排列

错误写法:

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

image.png

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

正确写法:

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

image.png

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

UNION

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

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

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


http://www.kler.cn/a/135763.html

相关文章:

  • 大数据-256 离线数仓 - Atlas 数据仓库元数据管理 正式安装 启动服务访问 Hive血缘关系导入
  • 事件抽取tr、ti、ar 和 ai的意思(触发词、事件类型、事件参数、参数的类型)
  • 分布式协同 - 分布式事务_2PC 3PC解决方案
  • MyBatis-Plus分页拦截器,源码的重构(重构total总数的计算逻辑)
  • STM32串口第一次接收数据时第一个字节丢失的问题
  • 渗透Vulnhub-DC-9靶机
  • Android 解决CameraView叠加2个以上滤镜拍照黑屏的BUG (二)
  • 【C++上层应用】2. 预处理器
  • Github小彩蛋显示自己的README,git 个人首页的 README,readme基本语法
  • Attingo:西部数据部分SSD存在硬件设计制造缺陷
  • open3d ICP 配准
  • Java自定义异常类详解及示例
  • WPF中的App类介绍
  • 【华为HCIP | 华为数通工程师】刷题日记1116(一个字惨)
  • screen中conda激活环境后登录jupyter notebook导入包提示找不到,但是在命令行中就可以导入包
  • 记录我常用的免费API接口
  • 如何使用ffmpeg将FLAC格式转为MP3格式
  • qt-C++笔记之两个窗口ui的交互
  • 测试和验证有什么区别,怎么划分测试集和验证集
  • 【运维篇】5.4 Redis 并发延迟检测
  • docker-给用户docker命令权限、无权限/var/run/docker.sock: connect: permission denied
  • 海云安入选证券期货业网络和数据安全实验室“安全合作伙伴”--助力金融科技产业安全发展
  • DBeaver连接本地MySQL
  • 【图数据库实战】HugeGraph图计算流程
  • Apache Doris (五十四): Doris Join类型 - Bucket Shuffle Join
  • 参数估计(一)(点估计)