Oracle——子查询

本文详细介绍了Oracle数据库中子查询的使用,包括在from、where后面的子查询,特别是单行和多行子查询的实践,如in、not in、exists、not exists、all、any等操作符的应用。此外,还提及了having后面的子查询以及select和from之间的特殊子查询限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值