zoukankan      html  css  js  c++  java
  • Oracle高级查询练习题

    --1. 列出至少有一个员工的部门名称select d.dname from dept d inner join (
           select count(ename),deptno from emp group by deptno having count(ename)>0
    )t on d.deptno=t.deptno;
    --2. 列出月薪比“SMITH”多的所有员工。
    select * from emp where sal>(
           select sal from emp where ename='SMITH'
    );
    --3. 列出所有员工的姓名及其直接上级的姓名。
    select e1.ename,e2.ename from emp e1 inner join emp e2 on e1.mgr=e2.empno;
    --4. 列出受雇日期早于其直接上级的所有员工的编号、姓名、部门名称。
    select e1.empno,e1.ename,d.dname from emp e1 
    inner join emp e2 on e1.mgr=e2.empno
    inner join dept d on e1.deptno=d.deptno
    where e1.hiredate<e2.hiredate;
    
    --5. 列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。
    select d.dname,e.* from dept d left outer join emp e on e.deptno=d.deptno;
    
    --6. 列出所有“CLERK”(办事员)的姓名及其部门名称、部门的人数。
    select m.ename,m.job, p.dname, p.renshu from emp m
    inner join (
          select d.deptno, d.dname, count(e.empno) renshu from emp e inner join dept d on e.deptno = d.deptno group by d.dname, d.deptno
    ) p on m.deptno = p.deptno where m.job = 'CLERK';
    --7. 列出最低月薪大于1500的各种工作及从事此工作的全部雇员人数。
    select job,sal from emp;
    select t1.job,t2.renshu from (
           select job from emp group by job having min(sal)>1500
    )t1 inner join (
        select job,count(ename) from emp group by job
    )t2 on t1.job=t2.job;
    
    --8. 列出在部门“SALES”(销售部)工作的员工的姓名。
    select e.ename from emp e inner join dept d on e.deptno=d.deptno where d.dname='SALES';
    
    --9. 列出月薪高于公司平均月薪的所有员工,所在部门,上级领导,工资等级。
    select e1.ename,d.dname,e2.ename,s.grade from emp e1 left outer join dept d on e1.deptno=d.deptno
    left outer join emp e2 on e1.mgr=e2.empno 
    left outer join salgrade s on (e1.sal+nvl(e1.comm,0)) between s.losal and s.hisal
    where (e1.sal+nvl(e1.comm,0))>(
         select round(avg(e.sal + nvl(e.comm, 0))) from emp e 
    );
    
    --10. 列出与“SCOTT”从事相同工作的所有员工及部门名称。
    select e.ename,d.dname from emp e inner join dept d on e.deptno=d.deptno where e.job=(
           select job from emp where ename='SCOTT'
    ) and e.ename <> 'SCOTT';
    
    --11. 列出月薪等于部门30中员工的月薪的所有员工的姓名和月薪。
    select ename,sal from emp e where sal in (
           select distinct(sal) from emp where deptno=30
    );
    --12. 列出月薪高于在部门30工作的所有员工的月薪的员工的姓名、月薪、部门名称。
    select e.ename,e.sal,d.dname from emp e  inner join dept d on e.deptno=d.deptno where sal >all (
           select distinct(sal) from emp where deptno=30
    );
    --13. 列出每个部门工作的员工的数量、平均工资和平均服务期限。
    select count(ename) 员工数量,floor(avg(sal+ nvl(comm, 0))) as 平均工资,floor(avg(sysdate-hiredate)) as 平均服务期限 from emp group by deptno;
    --14. 列出所有员工的姓名、部门名称和部门平均工资。
    select m.ename, t.dname, t.b_avg
      from emp m
      left outer join (select d.deptno,
                              d.dname,
                              round(avg(e.sal + nvl(e.comm, 0))) b_avg
                         from emp e
                        inner join dept d
                           on e.deptno = d.deptno
                        group by d.deptno, d.dname) t
        on m.deptno = t.deptno;
    --15. 列出所有部门的详细信息和部门人数。
    select d.*,t.renshu from dept d inner join (
           select deptno,count(ename) as renshu from emp group by deptno
    )t on d.deptno=t.deptno ;
    --16. 列出各种工作的最低工资及从事此工作的员工姓名。
    select e.ename,t.minsal from emp e inner join (
           select job,min(sal+ nvl(comm, 0)) minsal from emp group by job
    )t on e.job=t.job;
    
    --17. 列出各个部门的MANAGER(经理)的最低月薪。
    select deptno,min(sal) from emp where job='MANAGER' group by deptno;
    --18. 列出所有员工的年总收入,按年总收入从低到高排序。
    select ename,(sal+nvl(comm,0))*12 from emp order by (sal+nvl(comm,0))*12;
    --19. 列出员工的上级主管信息,并要求这些主管的月薪超过3000。
    select * from emp where empno in(
           select e1.mgr from emp e1 inner join emp e2 on e1.mgr=e2.empno group by e1.mgr
    ) and sal>3000;
    --20. 列出部门名称中带“S”字符的部门员工的月薪合计、部门人数。
    select d.dname,t.heji,t.renshu from dept d inner join (
           select deptno,count(ename) renshu,sum(sal) heji from emp group by deptno
    )t on d.deptno=t.deptno where instr(d.dname,'S',1)>0;
    
    --21. 求出部门平均月薪最高的部门名和平均月薪。
    select d.dname,t.pingjun from dept d inner join (
           select deptno,floor(avg(sal+ nvl(comm, 0))) pingjun from emp group by deptno 
    )t on d.deptno=t.deptno where t.pingjun=(
       select max(floor(avg(sal))) pingjun from emp group by deptno 
    );
  • 相关阅读:
    【转】2008年中国.NET技术应用趋势分析
    VB计算器(给上学需要应付作业的应个急)
    创业失败的18个原因
    使用ChilkatDotNet组件构建网络爬虫程序
    使用文本编辑器开发和部署一个ASP.NET Web应用程序
    优化 SQL Server 查询性能
    【转】sql性能优化方法
    使用 SOS 对 Linux 中运行的 .NET Core 进行问题诊断
    MultiThread Of Member Functions
    汇编 中断调用表 (中断向量表)
  • 原文地址:https://www.cnblogs.com/qilin20/p/12450597.html
Copyright © 2011-2022 走看看