子查询
意思是 一个查询的结果可以做为另一个查询的条件或数据源
-
如何查出工资最大的人的姓名: 样表如下
1、子查询情况:将查询结果作为另一个查询的条件
select ename,sal from emp where sal = (select max(sal) from emp);
需求:查出公司中哪些人是经理人:mgr字段是empno 的上司编号
//查询mgr字段 并去重
select distinct mgr from emp where mrg is not null;
//结合 in 意思是 where 条件当中 任何一个都可以
select ename,empno from emp where empno in (select distinct mgr from emp where mrg is not nul);
in 是等值比较
2.查询结果做为另一个查询的数据源 (理解为当成一张表,必须起别名)
需求:查出平均工资最大的部门是哪个?
- 思路:先查出每个部门的平均工资 group by 部门 deptno
//给avg 别名 查询出来的当作一张表
select avg(sal) avg_sal,deptno from emp group by deptno;
//先求出最大值: avg_table是临时表的别名
select max(avg_sal) from (select avg(sal) avg_sal,deptno from emp group by deptno) avg_table
//进阶:如果加上部门字段,那么就要这样写
select avg_sal,deptno from (select avg(sal) avg_sal,deptno from emp group by deptno) e where avg_sal = (select max(avg_sal) from (select avg(sal) avg_sal,deptno from emp group by deptno) avg_table)