Oracle(第六章 子查询)

having子句应用子查询
例如:显示部门内最低工资比20部门最低工资要高的部门的部门编号及部门内的最低工资
第一步:查询每个部门的最低工资
select deptno,min(sal) from emp group by deptno;
第二步:20部门的最低工资是多少?
select min(sal) from emp where deptno=20;
第三步:查询哪些部门最低工资比800(20部门的最低工资)多?
select deptno,min(sal) from emp group by deptno having min(sal)>800;
最终查询:
select deptno,min(sal) from emp group by deptno having min(sal)>
(select min(sal) from emp where deptno=20);

课本p84的一个判断

多行子查询
例如:查找比JOB为CLERK收入少的而工种不是CLERK的员工编号,员工姓名,工种和收入
第一步:查找job为CLERK的员工收入
select sal from emp where job=‘CLERK’;
第二步:查询工种不是CLERK,工资收入比800,950,1300少的员工信息
select empno,ename,job,sal from emp where job <> ‘CLERK’ and sal <1300;
最终查询:不是CLERK的员工编号,员工姓名,工种和收入
select empno,ename,job,sal from emp where job <> ‘CLERK’ and sal<any(select sal from emp where job=‘CLERK’);
试一试:请问将上题中的any换成all有怎样的结果?
select empno,ename,job,sal from emp where job <> ‘CLERK’ and sal<all(select sal from emp where job=‘CLERK’);
注意:all是全部,any是任何一个
所以得出:
all< 小于子查询中最小的数据值
all> 大宇子查询中最大的数据值
any< 小于子查询中最大的数据值
any> 大于子查询中最小的数据值
任务:查询比三个部门平均工资都高的员工编号,员工姓名,工种和收入
第一步:三个部门平均工资
select avg(sal) from emp group by deptno;
第二步:查询平均工资比2916.66高的员工编号,员工姓名,工种和收入
select empno,ename,job,sal from emp where sal>2916;
第三步合并
select empno, ename,job,sal from emp where sal>all(select avg(sal) from emp group by deptno);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值