MySQL—— 子查询
Posted 大彤小忆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
以上是关于MySQL—— 子查询的主要内容,如果未能解决你的问题,请参考以下文章