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 语句返回的所有结果
相关推荐
傻啦嘿哟32 分钟前
某招聘平台爬虫:爬取招聘岗位数据,分析各城市薪资水平
开发语言·爬虫·python
2501_9336707933 分钟前
2026秋招量化分析岗技能栈:Python、SQL、统计建模、回测项目怎么准备
开发语言·python·sql
程序员清风1 小时前
Java 后端高并发设计:线程池、限流、熔断与降级
java·数据库·oracle
李少兄1 小时前
JavaScript 数据类型完全指南
开发语言·javascript·ecmascript
天衍四九-1 小时前
MySQL中如何定位慢查询?如果SQL语句执行很慢,如何分析和优化?
数据库·sql·mysql
隐擎fox2 小时前
深入理解网络传输层安全:TLS 指纹识别(JA3/JA4)原理与 Python 协议层检测实战
爬虫·python·网络协议·安全·网络安全·https
尚久龙2 小时前
mysql-5.7.26-winx64的安装步骤
数据库·mysql
游戏开发爱好者82 小时前
网络连接排查指南,谁在电脑后台偷跑流量,哪些程序在联网
网络协议·计算机网络·网络安全·ios·adb·https·udp
医疗信息化王工2 小时前
DataForge:基于 Python 的数据库批量导出 Excel 工具——从架构到部署的全流程实战
数据库·python·excel
实心儿儿2 小时前
MySQL 的安装
数据库·mysql·adb