Oracle 子查询

本文深入讲解了SQL子查询的应用场景及技巧,包括单行子查询和多行子查询的使用,如ANY、ALL、IN等关键字的应用,以及通过具体实例展示如何进行复杂的数据筛选和对比。
--单表查询:
  --当需要的数据在一张表中,考虑使用单表查询

--多表联合查询:
  --当需要查询的数据分布在多张表中,考虑使用多表联合

--子查询学习:
  --使用时机:当查询的筛选条件不明确时,考虑使用子查询。

  --单行子查询
  --多行子查询
----------------------------------------------------------------

--单行子查询:

  --使用时机:筛选条件不明确需要执行一次查询,并且查询结果一个字段并值只有一个

  --注意:where子句中允许出现查询语句,该查询语句称为子查询


  --使用:select 内容 from 表名 where 字段名 比较运算符 子查询语句

    --查询所有比雇员“CLARK”工资高的员工信息

      select * from emp where sal>(select sal from emp where ename ='CLARK')

    --查询工资高于平均工资的员工的名字和工资

    select ename,sal from emp where sal>(select avg(sal) from emp )

    --查询和soctt属于同一部门且工资比他低的员工资料

    select * from emp where deptno=(select deptno from emp where ename='SCOTT') and sal<(select sal from emp where ename='SCOTT')

    --查询工资最高的员工资料

    select * from emp where sal=(select max(sal) from emp)

    --查询职务和scott相同,雇佣时间早的员工信息

    select * from emp where job=(select job from emp where ename='SCOTT') and hiredate <(select hiredate from emp where ename='SCOTT')

    --查询工资比scott高或者雇佣时间早的员工编号和名字
 
    select empno,ename from emp where job=(select job from emp where ename='SCOTT') or hiredate <(select hiredate from emp where ename='SCOTT')
----------------------------------------------------------------------------


----多行子查询:

     --使用:子查询的结果只有一个字段但是字段有n个值,考虑使用多行子查询,其实就是使用关键字

       --关键字1:any 任意
            --select 内容 from 表名 where 字段名 比较运算符 any 子查询语句

       --关键字2:all 所有
            --select 内容 from 表名 where 字段名 比较运算符 all 子查询语句

       --关键字3:in 表示任意存在,相当于 = any  
            --select 内容 from 表名 where 字段名 in 子查询语句   
            --select 内容 from 表名 where 字段名 not in 子查询语句   

    --查询工资高于任意一个CLERK的所有员工信息

     select * from  emp where sal> any (select sal from emp where job='CLERK')

    --查询工资高于所有SALESMAN的员工信息

    select * from emp where sal> all (select sal from emp where job='SALESMAN')

    --查询部门20中同部门10的雇员工作一样的雇员信息

    select job from emp where deptno=10
 
   select *from emp where (job='MANAGER' or job='PRESIDENT' or job='CLERK') and deptno=20

    select * from emp where job  in (select job from emp where deptno=10) and deptno=20

     select * from emp where job = any (select job from emp where deptno=10) and deptno=20
    
    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值