Oracle----子查询

子查询

1.          单行子查询除了可以放在WHERE子句中,还可以放在HAVING子句中和FROM子句中。在书写单行子查询的时候要注意以下要求:

单行子查询使用单行比较关系符。

单行子查询放在单行比较关系符的右边

单行子查询放在括号中

单行子查询中不能使用ORDER BY子句。

        select empno,ename,sal,job

from emp

where job =

(

select job

from emp

where ename = 'SMITH'

)

2.          HAVING子句中的单行子查询

select job,min(sal),avg(sal),max(sal)

 from

 emp

 where job not like 'presid%'

 group by job

having avg(sal) >

(

 select min(avg(sal))

from emp

group by job

)

3.          FROM子句中的单行子查询

SQL> selecte.empno,e.ename,e.sal,e.job,a.avesal

  2  fromemp e,(select job,avg(sal) avesal

  3  fromemp

  4 group by job) a

  5 where e.job = a.job

  6  ande.sal > a.avesal

  7  ande.job <>'CLERK';

       4.    使用IN操作符的多行子查询

              比较操作符IN的含义是为子查询返回列表中的任何一个。

              1  select empno,ename,job,sal

             2 from

             3 emp

             4 where sal in

             5 (select max(sal) from emp

             6 group by job)

             7 and job <> 'CLERK'

             8 and job NOT LIKE

             9* 'PRES%'

4.          使用ALL操作符的多行子查询

ALL操作符比较子查询返回列表中的每一个值。<ALL 为小于最小的,>ALL为大于最大的。=ALL 为等于ALL中的所用值,即ALL中的值全相同。

selectempno,ename,job,sal

from emp

where sal <all

(select avg(sal)

from emp

group by job

);

5.          使用ANY操作符的多行子查询

ANY操作符比较子查询返回列表中的每一个值。<ANY 为小于最大的,>ANY为大于最小的,那么等于ANY 相当于IN.

SQL> selectempno,ename,job,sal

  2  fromemp

  3 where sal > ANY(select avg(sal)

  4  fromemp group by job);

       6.    子查询中的空值问题

       7.   多列子查询

              成对比较多列子查询(Pairwise Comparison)

              非成对比较子查询(Nonpairwise Comparison)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值