※ 嵌套查询(一个子查询的结果是另外子查询的条件)
※ 案例:
a .查询工资比Simth工资高的员工信息
1.查询Simth的工资(分步)
select salary
from s_emp
where last_name=’Simth’
2.工资比Simth工资高
select
from s_emp
where salary>();//()为1中所求内容
3.整合操作
select last_name,salary
from s_emp
where salary>(select salary
from s_emp
where last_name=’Simth’);
b .查询平均工资比41号部门的平均工资高的部门中员工的信息
1.查询41号部门的平均工资
select avg(salary)
from s_emp
where dept_id=41
2.查询部门平均工资比41号部门高的部门
select dept_id
from s_emp
group by dept_id
having avg(salary)>()
3.查询部门平均工资比41号部门高的部门的员工信息
select last_name
from s_emp
where dept_id in()
4.整合
select last_name
from s_emp
where dept_id in(select dept_id
from s_emp
group by dept_id
having avg(salary)>(select avg(salary)
from s_emp
where dept_id=41));
c .查询平均工资比1247.5高的部门的员工信息(同上)
※ 伪表(把查询的结果作为一张表处理)
d .查询平均工资比41号部门的平均工资高的部门中员工的信息,并显示出当前部门的平均工资
(把查询的结果作为一张表处理(伪表))
1.查询41号部门的平均工资
select avg(salary)
from s_emp
where dept_id=41
2.查询部门平均工资比41号部门高的部门
select dept_id,avg(salary) avg
from s_emp
group by dept_id
having avg(salary)>()
3.显示员工信息及当前部门的平均工资
select s.last_name,s.salary,m.avg
//伪表直接把查询的代码放在()里
from s_emp s,() m //后面用别名方便调用
where s.dept_id=m.dept_id
4.整合
select s.last_name,s.salary,m.avg
from s_emp s,(select dept_id,avg(salary) avg
from s_emp
group by dept_id
having avg(salary)>(select avg(salary)
from s_emp
where dept_id=41)) m
where s.dept_id=m.dept_id;
e .查询员工信息,这些员工的工资要比自己所在部门的平均工资高,同时显示部门的名称以及所在地区
1.查询所有部门的平均工资
select avg(salary) avg,dept_id
from s_emp
group by dept_id;
2.些员工的工资要比自己所在部门的平均工资高
select s.last_name,s.salary,m.avg,d.name,r.name
from s_emp s,() m,s_dept d,s_region r
where s.dept_id=m.dept_id
and s.salary>m.avg
and s.dept_id=d.id
and d.region_id=r.id
f .查询工资比 Ngao所在部门平均工资 要高的员工信息,同时这个员工所在部门的平均工资 也要比Ngao所在部门的平均工资要高,显示当前部门的平均工资以及部门的名字和所在地区
1.Ngao所在部门
select dept_id
from s_emp
where last_name=‘Ngao’;
2.Ngao所在部门平均工资
select avg(salary)
from s_emp
where dept_id=(); g
3.求出比Ngao所在部门平均工资高的部门
select dept_id,avg(salary) avg
from s_emp
group by dept_id
having avg(salary)>() m
4.找员工信息(薪水要Bgao部门平均工资高,员工自己所在的部门也要比Ngao部门平均工资高)
select s.last_name,m.avg,d.name,r.name
from s_emp s,() m,s_dept d,s_region r
where s.dept_id=m.dept_id
and s.salary>(g)
and s.dept_id=d.id
and d.region_id=r.id
5.组装
select s.last_name,m.avg,d.name,r.name
from s_emp s,(select dept_id,avg(salary) avg
from s_emp
group by dept_id
having avg(salary)>(select avg(salary)
from s_emp
where dept_id=(select dept_id
from s_emp
where last_name=‘Ngao’))) m,s_dept d,s_region r
where s.dept_id=m.dept_id
and s.salary>(select avg(salary)
from s_emp
where dept_id=(select dept_id
from s_emp
where last_name=‘Ngao’))
and s.dept_id=d.id
and d.region_id=r.id
g. 查询s_emp表每个部门的最大工资数,并且显示出这个最大工资的员工名字以及该部门的名字和该部门所属区域,并且使用部门编号进行排序
1.每个部门的最大工资数
select max(salary) max,dept_id
from s_emp
group by dept_id
2.找人
select s.last_name,s.salary,d.name,r.name
from s_emp s,() m,s_dept d,s_region r
where s.dept_id=m.dept_id
and s.salary=m.max
and s.dept_id=d.id
and d.region_id=r.id
order by s.dept_id