子查询(嵌套查询)

即一个select语句中嵌套了另外的一个或者多个select语句

例子:
1.查询工资比Simth工资高的员工信息
//查Simth的工资
select last_name,salary 
from s_emp
where lower(last_name)='smith';
//查询工资比Simth工资高的员工信息
select last_name,salary
from s_emp 
where salary>(
select salary 
from s_emp
where lower(last_name)='smith'
);

2.查询平均工资比 41号部门的平均工资高的部门中员工的信息
//41号部门的平均工资
select dept_id,avg(salary)
from s_emp
group by dept_id
having dept_id=41;

//平均工资比41号部门高的部门
select dept_id,avg(salary)
from s_emp
group by dept_id
having avg(salary)>(
select avg(salary)
from s_emp
group by dept_id
having dept_id=41
);

//这些部门中的员工信息
select last_name,salary
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
group by dept_id
having dept_id=41
)
);


3.查询平均工资比41号部门的平均工资高的部门中
员工的信息,并且显示出当前部门的平均工资,同时显
示出部门的名字

//41号部门的平均工资
select avg(salary)
from s_emp
where dept_id=41;

//平均工资比41号部门的平均工资高的部门
select dept_id,avg(salary)
from s_emp
group by dept_id
having avg(salary)>(
select avg(salary)
from s_emp
where dept_id=41
);

//当前部门的平均工资
select avg(salary)
from s_emp
group by dept_id;

select s1.last_name,s1.salary,temp.avgsal,sd.name
from s_emp s1,(
select avg(salary) avgsal,dept_id
from s_emp
group by dept_id
)temp,s_dept sd
where s1.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
)
) and temp.dept_id=s1.dept_id
and s1.dept_id=sd.id;

4.查询员工信息,这些员工的工资要比自己所在部门的平均工资高,
 同时显示部门的名称以及所在地区

//每个部门的平均工资
select dept_id,avg(salary)
from s_emp
group by dept_id;

//比自己所在部门工资高的员工
select s1.last_name,s1.salary,s1.dept_id,temp.avgsal
from s_emp s1,(
select dept_id,avg(salary) avgsal
from s_emp
group by dept_id
)temp
where s1.dept_id=temp.dept_id
and s1.salary>temp.avgsal;

//显示名称和区域
select s1.last_name,s1.salary,s1.dept_id,temp.avgsal,sd.name,sr.name
from s_emp s1,(
select dept_id,avg(salary) avgsal
from s_emp
group by dept_id
)temp,s_dept sd,s_region sr
where s1.dept_id=temp.dept_id
and s1.salary>temp.avgsal
and sd.region_id=sr.id
and s1.dept_id=sd.id;

5.查询工资比Ngao所在部门平均工资要高的员工信息,
 同时这个员工所在部门的平均工资也要比Ngao所在部
 门的平均工资要高,显示当前部门的平均工资以及部门的
 名字和所在地区

//Ngao所在部门
select last_name,dept_id
from s_emp
where last_name='Ngao';

//Ngao所在部门部门平均工资
select avg(salary)
from s_emp
where dept_id=(
select dept_id
from s_emp
where last_name='Ngao'
);

//平均工资比Ngao所在部门部门平均工资高的部门
select dept_id
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'
)
);


//
select s1.id,s1.last_name,s1.dept_id,temp.avgsal,sd.name,sr.name
from s_emp s1,(
select dept_id,avg(salary) avgsal
from s_emp
group by dept_id
)temp,s_dept sd,s_region sr
where s1.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=(
select dept_id
from s_emp
where last_name='Ngao'
)
)
) and temp.avgsal>(
select avg(salary)
from s_emp
where dept_id=(
select dept_id
from s_emp
where last_name='Ngao'
)
) and s1.dept_id=temp.dept_id
and sd.region_id=sr.id
and s1.dept_id=sd.id;






  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值