Oracle-28-子查询之多行子查询&子查询之多列子查询

一、子查询的基本类型之多行子查询

(1)使用IN操作符进行多行子查询。(总结:IN操作符后可用多行子查询)

比如:查询各个职位中工资最高的员工信息。


SQL>select ename, job, sal from emp where sal in (select max(sal) from emp group by job);——单列子查询



SQL>select ename, job, sal from emp where (sal,job) in (select max(sal), job from emp group by job);——多列子查询

 

(2)使用exists操作符进行多行子查询。(总结:exists操作符后可用多行子查询)

引入exists的目的:在一些情况下,只需要子查询返回一个真值或是假值。如果只考虑是否满足判断条件,而数据本身并不重要,可以使用exists操作符来定义子查询。

比如:


SQL>select empno, ename, sal from emp where exists (select * from dept where deptno =‘40’)


【注意】以上SQL语句如果子查询(select * from dept where deptno = ‘40’)有结果,那么exists前面的语句会执行,如果exists后面的没结果,那么其前面的不会执行。


(3)使用ALL操作符进行多行子查询。(总结:all操作符后可用多行子查询)

比如:


SQL>select empno, ename, sal, job from emp where sal < all (select avg(sal) from emp group by job);


【注意】all操作符比较子查询返回列表中的每一个值。

<all为小于最小的

>all为大于最大的

=all无意义,一般不写。

 

解释:子查询(select avg(sal) from emp group by job)是计算每个职位的平均工资,那么不同职位的平均工资不同,有高有低,所以<all是小于最小的,即小于最低平均工资。同理>all是大于最大的, 即大于最高平均工资。

 

(4)使用ANY操作符进行多行子查询。(总结:any操作符后可用多行子查询)

比如:


SQL>select empno, ename, sal, job from emp where sal > any (select avg(sal) from group by jon)

 

【注意】any操作符后接多行子查询返回列表中的每一个值。

<any为小于最大的

>any为大于最小的。

 

1:练习all操作符后接多行子查询。

解:当前sc表数据:




现在将同一门课程分为一组,计算均分,即按照cno值相同分组求平均:




用all操作符后接多行子查询,查看小于所有均分中最小值(79.25)的学生信息:




用all操作符后接多行子查询,查看大于所有均分中最大值(80.32)的学生信息:



 

2:练习any操作符后接多行子查询。

解:当前sc表数据:




现在将同一门课程分为一组,计算均分,即按照cno值相同分组求平均:




用any操作符后接多行子查询,查看小于所有均分中最大值(80.32)的学生信息:




用any操作符后接多行子查询,查看大于所有均分中最小值(79.25)的学生信息:



 

二、子查询的基本类型之多列子查询

多列子查询要返回多列。

比如:查询哪些员工的工资为所任职位中最高的。


SQL>selecte mpno, ename, sal, job from emp where (sal, job) in (select max(sal), job from emp group by job);


【总结】

单列子查询就是子查询中只有1个列名,如(select avg(sal) from emp group by job);多列子查询就是子查询中不止1个列名,如(select max(sal), job from emp group by job)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值