MySQL复合查询

目录

​编辑

多表查询

子查询

单行子查询

多行子查询

多列子查询

from子句中使用子查询

合并查询

union

[union all](#union all)


多表查询

在实际应用中,数据往往来自多张不同的表,而查询也可能基于多表来进行,要将多张表组合进行查询,如下所示:

可以发现,其中一个表同一个数据出现了多次,如ename中"SMITH"出现了多次,这是因为,在表进行组合时,采用的为笛卡尔积的方式。笛卡尔积的方式是从第一张表中选出第一条记录,和第二个表的所有记录进行组合,然后从第一张表中取第二条记录,和第二张表中的所有记录组合,不加过滤条件,得到的结果为留卡儿积。

组合之后也为一张表,再对这张表进行条件筛选即可完成对应的查询。如下所示:

在两张表中出现一次的列可以不加表名。

同时,也可以将同一张表进行连接查询,只不过要对每张表进行重命名,如下所示:

子查询

子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询。

单行子查询

单行子查询是指返回一行记录的子查询。如下所示:

如显示SMITH同一部门的员工:

多行子查询

多行子查询为可以返多行记录的子查询。常配合in、all和any关键字使用,三个关键字使用示例如下:

1.in:查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含10自己的:

2.all:显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号:

3.any:显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号(包含自己部门 的员工):

多列子查询

单行子查询是指子查询只返回单列,单行数据;多行子查询是指返回单列多行数据,都是针对单列而言 的,而多列子查询则是指查询返回多个列数据的子查询语句。如下所示:

查询和SMITH的部门和岗位完全相同的所有雇员,不含SMITH本人:

from子句中使用子查询

子查询语句出现在from子句中,把一个子查询当做一个临时表使用。如下所示:

  1. 显示每个高于自己部门平均工资的员工的姓名、部门、工资、平均工资:
  1. 查找每个部门工资最高的人的姓名、工资、部门、最高工资:
  1. 显示每个部门的信息(部门名,编号,地址)和人员数量:

合并查询

在实际的查询中,为了合并多个select的执行结果,可以使用集合操作符union,union all。

union

该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行。如下所示:

将工资大于2500或职位是MANAGER的人找出来:

union all

该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行。

相关推荐
草莓熊Lotso3 小时前
【C++ 基于微服务的即时通讯系统】etcd + brpc 从安装到服务注册发现全链路实战
网络·数据库·c++·redis·微服务·etcd
Lethehong8 小时前
Oracle 加个字段,目标库就报错?KFS 用“先拆后组“打通异构 DDL
数据库·oracle
Web极客码9 小时前
锁定真正的磁盘卡顿:我用 OpenCode 配合 eBPF 诊断 NVMe 队列深度延迟与 I/O 写放大
数据库·oracle
cspttty9 小时前
2027用户研究求职准备:应用统计学如何补齐研究设计与业务表达
大数据·数据库
roman_日积跬步-终至千里10 小时前
【数据Agent论文·查询与语义|05】Spider:为什么换一个数据库,模型就不会查了?
数据库·数据分析
猫咪很可爱11 小时前
Oracle RAC 启动失败排查:私网通信与内核参数优化实战
运维·数据库·oracle
XLYcmy11 小时前
《数字经济赋能城市低碳治理的路径研究检索报告》审阅与修改指导意见——基于完整检索报告体例的完整性诊断、学术规范核查与方法论纠偏 上
数据库·ai·chatgpt·文心一言·检索·知网·豆包
泡海椒11 小时前
JQuick-SQL 快速开始:注册内存表并执行查询
数据库·windows·sql
ss27311 小时前
PG实战笔记 | 09 PostgreSQL psql客户端基本操作
数据库·笔记·postgresql
电商API_1800790524711 小时前
反向海淘多币种结算:汇率该在哪个时点被冻结
java·开发语言·数据库·跨境电商·1688 api