oracle学习总结-----子查询

子连接:(子查询一般不超过四层)


--需求:查询在NEW YORK工作的员工信息(需要用多值连接符in)
select * from emp where deptno in (select deptno from dept where loc='NEW YORK');




多列子查询:
 ---需求:如何查询与smith的部门与岗位相同的所有雇员。
   select * from emp where (deptno,job) = (select from deptno,job from emp where ename = 'SMITH');




from字句中使用子查询
  ---需求:如何显示高于自己部门平均工资的员工信息
      思路:将子查询的结果当成临时表
   select ename,sal,t2.avgsal,emp.deptno from emp,
    (select avg(sal) avgsal ,deptno from emp group by deptno) t2
    where emp.deptno = t2.deptno and emp.sal >t2.avgsal;
  
 ---需求:查询本部门最高工资的人员详细信息
     select emp.* ,t2.maxsal from emp,
      (select max(sal) maxsal,deptno from emp group by deptno) t2
       where emp.deptno = t2.deptno and emp.sal >=t2.maxsal;


   
     select emp.* ,t2.maxsal from emp inner join
      (select max(sal) maxsal,deptno from emp group by deptno) t2
      on emp.deptno = t2.deptno where emp.sal >=t2.maxsal;


 ---需求:查询每个部门的人员数量
     select dept.deptno,dept.dname,t2.total from dept
       inner join (select count(ename) total,deptno from emp group by deptno )t2
       on dept.deptno = t2.deptno ;


   ?注解:在from字句中使用子查询时,必须给子查询使用别名


--需求:查询不在NEW YORK工作的员工信息(需要用多值连接符in)
select * from emp where deptno != (select deptno from dept where loc='NEW YORK');
select * from emp where deptno != (select deptno from dept where loc='NEW YORK');
--*拓展:in 和 notin 都是多值连接符,忽略空值。
--*拓展:with as 语句
with 
           temp1 as (select ... from 表1 where ...),
           temp2 as (select ... from 表2 where ...)
select temp1.inmoney/temp2.outmoney from temp1,temp2
where temp1.in_mon=temp2.out_mon;           
            
           


--*拓展:
--select * from emp where rownum = N ,当N大于1时是错的,因为rownum是依存于它的上一个rownum存在的,所以必须用 rownum <= N
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值