Oracle——子查询

4.子查询

子查询指一个查询语句嵌套在另一个查询语句内部的查询

1.from后面的子查询

select ename, mname
  from (select e.*, d.empno, d.ename mname, d.job, d.sal, d.deptno from emp e, emp d where e.mgr = d.empno(+));

2.where后面的子查询

(1)单行子查询
单行子查询:子查询的sql语句只查出一条记录

–查询工资大于10号部门平均工资的员工信息

select * from emp where sal>(select avg(sal) from emp where deptno=10); 

(2)多行子查询
多行子查询:子查询的sql语句查出若干条记录
in、not in、exists、not exists、all、any

**1)用单行子查询

–查询20号部门的最高工资

 select max(sal) from emp where deptno=20;
 select * from emp where sal>( select max(sal) from emp where deptno=20);

2)>all

–20号部门的员工工资是一个集合

select sal from emp where deptno=20;

select * from emp where sal>all(select sal from emp where deptno=20);

3.exists、not exists

exists:后面跟子查询,如果子查询能查出数据,那么条件是真的,如果子查询查不出结果,条件不成立

select * from dept d where exists(select * from emp where deptno=d.deptno);

–查询没有有员工的部门信息

select * from dept d where not exists(select * from emp where deptno=d.deptno);

4.having后面的子查询

–查询各个部门的部门编号和员工人数,要求部门的平均工资大于30号部门的平均工资

select deptno,count(*),avg(sal) from emp group by deptno having avg(sal)>1500;

–查询30号部门的平均工资

select avg(sal) from emp where deptno=30;

select deptno,count(*) from emp group by deptno having avg(sal)>(select avg(sal) from emp where deptno=30);

5.select 和from 之间的子查询

select empno,ename,(select 1 from dual) from emp;

注意:select 和from之间的子查询,子查询的结果只能是单行单列
原始排序:

select e.,(select count() from emp where sal>e.sal) from emp e order by 9;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值