子查询

※ 嵌套查询(一个子查询的结果是另外子查询的条件)

※ 案例:
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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值