MySQL 保姆级教程(十五): 组合查询

第 17 章 组合查询

17.1 组合查询

sql 复制代码
MySQL 允许执行多个查询(多条 SELECT 语句),并将结果作为单个查询集返回

17.2 创建组合查询

sql 复制代码
可用 UNION 操作符来组合数条 SQL 查询

17.2.1 使用 UNION

sql 复制代码
输入: SELECT user.USER FROM user UNION SELECT global_grants.USER FROM global_grants;
输出:
+------------------+
| USER             |
+------------------+
| root             |
| mysql.infoschema |
| mysql.session    |
| mysql.sys        |
+------------------+
分析: UNION 指示 MySQL 执行两条 SELECT 语句,并把输出组合成单个查询结果集

17.2.2 UNION 规则

sql 复制代码
1. UNION 必须由两条或两条以上的 SELECT 语句组成,语句之间用 UNION 分隔
2. UNION 中的每个查询必须包含相同的列、表达式或聚集函数(不管各个列不需要以相同的次序列出)
3. 列数据类型必须兼容:类型不必完全相同,但必须是 DBMS 可用隐含地转换的类型(例如,不同的数值类型或不同的日期类型)

17.2.3 包含或取消重复的行

sql 复制代码
输入: SELECT user.USER FROM user UNION ALL SELECT global_grants.USER FROM global_grants;
输出:
+------------------+
| USER             |
+------------------+
| root             |
| mysql.infoschema |
| mysql.session    |
| mysql.sys        |
| mysql.infoschema |
| mysql.session    |
| mysql.session    |
| mysql.session    |
| mysql.session    |
| mysql.session    |
| mysql.session    |
| mysql.session    |
| mysql.sys        |
| root             |
| root             |
| root             |
| root             |
| root             |
| root             |
| root             |
| root             |
| root             |
| root             |
| root             |
| root             |
| root             |
| root             |
| root             |
| root             |
| root             |
| root             |
| root             |
| root             |
| root             |
| root             |
| root             |
| root             |
| root             |
| root             |
| root             |
| root             |
| root             |
+------------------+
分析: UNION 默认自动去除了重复的行,可使用 UNION ALL 返回所有匹配的行

17.2.4 对组合查询结果排序

sql 复制代码
输入: SELECT user.USER FROM user UNION SELECT global_grants.USER FROM global_grants ORDER BY USER;
输出:
+------------------+
| USER             |
+------------------+
| mysql.infoschema |
| mysql.session    |
| mysql.sys        |
| root             |
+------------------+
分析: 在用 UNION 组合查询时,只能使用一条 ODER BY 子句,它必须出现在最后一条 SELECT 语句之后。但实际上 MySQL 将用它来排序所有 SELECT 语句返回的所有结果
相关推荐
一 乐6 小时前
婚纱摄影网站|基于ssm + vue婚纱摄影网站系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot·后端
Boilermaker19926 小时前
[Java 并发编程] Synchronized 锁升级
java·开发语言
沈浩(种子思维作者)6 小时前
真的能精准医疗吗?癌症能提前发现吗?
人工智能·python·网络安全·健康医疗·量子计算
MM_MS6 小时前
Halcon变量控制类型、数据类型转换、字符串格式化、元组操作
开发语言·人工智能·深度学习·算法·目标检测·计算机视觉·视觉检测
꧁Q༒ོγ꧂7 小时前
LaTeX 语法入门指南
开发语言·latex
njsgcs7 小时前
ue python二次开发启动教程+ 导入fbx到指定文件夹
开发语言·python·unreal engine·ue
alonewolf_997 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
1.14(java)7 小时前
SQL数据库操作:从CRUD到高级查询
数据库
古城小栈7 小时前
Rust 迭代器产出的引用层数——分水岭
开发语言·rust
ghie90907 小时前
基于MATLAB的TLBO算法优化实现与改进
开发语言·算法·matlab