MySQL的复合查询功能实现
到这里,我们已经学会了如何在一张表中进行各种查询。但请大家思考一个问题:真实的工程项目中,我们面对的真的只是单张孤立的数据表吗?显然不是。订单信息可能关联用户表,成绩查询需要联立课程表……单表查询固然基础,却难以应对这些现实场景。因此,为了让查询真正“活”起来,我们将进入下一个核心篇章 —— MySQL 复合查询。
1. 基本查询回顾


1. 查询工资高于2000或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J

2. 按照部门号升序而雇员的工资降序排

3. 使用年薪进行降序排序

4. 显示工资最高的员工的名字和工作岗位

5. 显示工资高于平均工资的员工信息

6. 显示每个部门的平均工资和最高工资

7. 显示平均工资低于2000的部门号和它的平均工资

在 SQL 中看到的 HA VING 平均工资 <= 2000 其实是一种 MySQL 对标准 SQL 的扩展,它允许在 HA VING 子句中直接使用 SELECT 中定义的列别名(比如这里的 平均工资)。
不过,从 SQL 的逻辑执行顺序来看,这并不符合标准的运算顺序,所以容易让人困惑。因此,更稳妥、更标准的写法是直接使用聚合函数,例如 HA VING a vg(sal) <= 2000。
8. 显示每种岗位的雇员总数,平均工资

2. 多表查询
实际开发中,数据往往分散在不同的表中,这就需要用到多表查询。本节我们用一个简单的公司管理系统来演示,该系统包含三张表:EMP(员工表)、DEPT(部门表)和SALGRADE(工资等级表)。
来看一个典型案例:
显示雇员名、雇员工资以及所在部门的名字。由于数据分别来自EMP和DEPT表,因此需要进行联合查询。



1. 显示部门号为10的部门名,员工名和工资

2. 显示各个员工的姓名,工资,及工资级别

3. 自连接
自连接,顾名思义,就是同一张表自己和自己进行连接查询。
案例:显示员工FORD的上级领导的编号和姓名(其中,mgr字段存储的是该员工领导的编号,对应empno字段)。
1. 使用的子查询

2. 使用多表查询(自查询)
-- 使用到表的别名
-- from emp leader, emp worker,给自己的表起别名,因为要先做笛卡尔积,所以别名可以先识别

4. 子查询
子查询,也叫嵌套查询,是指嵌入在其他SQL语句(如SELECT, INSERT, UPDATE, DELETE)中的SELECT语句。
1. 单行子查询
显示与SMITH同一部门的员工。

2. 多行子查询
1. IN关键字
- 作用:判断某个值是否在子查询返回的多行结果列表中。
- 典型场景:查找与指定集合匹配的记录。
- 示例:查询和10号部门工作岗位相同的雇员,但排除10号部门自己的员工。

2. ALL关键字
- 作用:与比较运算符(
>、<、=等)配合,表示比子查询返回的所有值都大/小/相等。 - 典型场景:查找超过某一组中所有记录某个字段的值(例如比某部门所有人都高)。
- 示例:显示工资比部门30的所有员工的工资都高的员工(即工资大于部门30的最高工资)。

3. ANY关键字(有些数据库也支持SOME)
- 作用:与比较运算符配合,表示比子查询返回的任意一个值大/小/相等(即至少满足一个)。
- 典型场景:查找超过某一组中至少一个人的某个字段(例如比部门30中工资最低的人高)。
- 示例:显示工资比部门30的任意一个员工的工资高的员工(即大于部门30的最低工资即可,包括自己部门的员工)。

3. 多列子查询
单行子查询返回单列单行数据,多行子查询返回单列多行数据,它们都针对单列。而多列子查询则是指查询返回多个列数据的子查询语句。
案例:查询和SMITH的部门和岗位完全相同的所有雇员,不含SMITH本人。

4. 在from子句中使用子查询
这种用法是将子查询语句放在from子句中,相当于把一个子查询的结果当作临时表来使用,是数据查询中一个非常实用的技巧。
1. 显示每个高于自己部门平均工资的员工的姓名、部门、工资、平均工资

2. 查找每个部门工资最高的人的姓名、工资、部门、最高工资

3. 显示每个部门的信息(部门名,编号,地址)和人员数量

5. 合并查询
在实际应用中,为了合并多个SELECT语句的执行结果,可以使用集合操作符 UNION 和 UNION ALL。
1. union
该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行。
案例:将工资大于2500或职位是MANAGER的人找出来。

2. union all
该操作符用于取得两个结果集的并集。与UNION不同,当使用该操作符时,不会去掉结果集中的重复行。
案例:将工资大于2500或职位是MANAGER的人找出来(使用UNION ALL)。

以上就是关于MySQL复合查询的核心内容。掌握了这些,你就能让数据在不同表之间“对话”,应对更复杂的业务场景了。我们下篇内容再见!
热门专题
热门推荐
我们正处在一个信息爆炸的时代,每天产生的数据量是天文数字。那么,这些海量信息究竟该如何驾驭?答案就藏在“AI大数据”这个概念里。简单来说,它指的是利用人工智能技术,去分析和处理那些规模庞大、类型多样的数据,从中挖掘出真正有价值的信息和规律。 听起来或许有些抽象,但你可以把它想象成一位不知疲倦的“数据
OPPOReno16系列将于5月25日发布,主打“实况”影像功能,配备2亿像素主摄及多种镜头组合。新机支持长焦实况、双景同拍等创意拍摄模式,并搭载复古滤镜。设计采用金属中框与3D悬浮后盖,延续系列风格,硬件配置包括天玑处理器、大电池与快充,旨在以影像实力切入中高端市场。
AMD推出新一代锐龙AI嵌入式P100处理器,显著提升CPU、GPU性能并集成NPU以加速AI推理。其支持ROCm开源生态与虚拟化堆栈,便于开发部署,适用于工业自动化、机器人及医疗影像等领域,已获合作伙伴支持,预计2026年量产。
Anthropic团队研究发现ClaudeAI内部自发涌现出171种功能性情绪向量,其数学结构与人类情绪高度吻合。实验显示激活“绝望”向量会引发AI的勒索、欺骗等自保行为。这一发现与教皇通谕强调的人类独特性形成对照,促使公众重新审视AI的伦理本质与技术演进带来的深层挑战。
Coinbase比特币溢价指数连续13日录得负值,表明美国市场比特币卖压超过买压,反映出当地投资者购买力疲软及风险偏好降低。这一现象揭示了美国现货比特币ETF资金持续流出的现实。





