MySQL数据库系列内容的学习目录 → \rightarrow →老杜带你学MySQL学习系列内容汇总。
9. 子查询
9.1 什么是子查询
子查询就是嵌套的 select 语句,可以理解为子查询是一张表。
select语句中嵌套select语句,被嵌套的select语句称为子查询。
9.2 子查询都可以出现在哪里
select
..(select).
from
..(select).
where
..(select).
9.3 where子句中的子查询
在 where 语句中使用子查询,也就是在 where 语句中加入 select 语句。
- 找出比最低工资高的员工姓名和工资:
select ename,sal from emp where sal > min(sal);
上述语句报错的原因:where子句中不能直接使用分组函数。
实现思路: 第一步:查询最低工资是多少select min(sal) from emp;
第二步:找出>800的select ename,sal from emp where sal > 800;
第三步:合并select ename,sal from emp where sal > (select min(sal) from emp);

9.4 from子句中的子查询
在 from 语句中使用子查询,可以将该子查询的查询结果看做一张表。
- 找出每个岗位的平均工资的薪资等级
第一步:找出每个岗位的平均工资(按照岗位分组求平均值)。
select job,avg(sal) from emp group by job;
第二步:克服心理障碍,把以上的查询结果就当做一张真实存在的表 t。
select * from salgrade;得到s表
第三步:t表和s表进行表连接,条件:t表的avg(sal) between s.losal and s.hisal;
select
t.*, s.grade
from
(select job,avg(sal) as avgsal from emp group by job) t
join
salgrade s
on
t.avgsal between s.losal and s.hisal;

9.5 在 select 语句中使用子查询
- 找出每个员工的部门名称,要求显示员工名,部门名
select
e.ename,(select d.dname from dept d where e.deptno = d.deptno) as dname
from
emp e;

注意:对于select后面的子查询来说,这个子查询只能一次返回1条结果,多于1条,就报错了。如下所示:
select
e.ename,e.deptno,(select dname from dept) as dname
from
emp e;

—— 子查询&spm=1001.2101.3001.5002&articleId=119777300&d=1&t=3&u=3c2b27ad89084a55a0b626c25848a07f)
3497

被折叠的 条评论
为什么被折叠?



