子查询

子查询

意思是 一个查询的结果可以做为另一个查询的条件或数据源

  • 如何查出工资最大的人的姓名: 样表如下


    image.png

1、子查询情况:将查询结果作为另一个查询的条件

image.png
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;
image.png
//结合 in 意思是 where 条件当中 任何一个都可以
select ename,empno from emp where empno in (select distinct mgr from emp where mrg is not nul);

in 是等值比较

image.png

2.查询结果做为另一个查询的数据源 (理解为当成一张表,必须起别名)

需求:查出平均工资最大的部门是哪个?

  • 思路:先查出每个部门的平均工资 group by 部门 deptno
//给avg 别名  查询出来的当作一张表
select avg(sal) avg_sal,deptno from emp group by deptno;
image.png
//先求出最大值: 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)



你可能感兴趣的:(子查询)