oracle学习笔记八——查询之练习总结

八.练习总结

练习一:找到员工表中工资最高的前三名,参考结果:

练习一参考结果:员工表中工资最高的前三名
-->答案:
SQL>select rownum, empno, ename, sal
    from (select * from emp order by sal desc)
    where rownum<=3;

=========================引申出分页的问题========================
--取8条数据,分成2页,现在取出第2页

SQL>select *
    from (select rownum r, e1.*
          from (select * from emp order by sal) e1
          where rownum<=8)
    where r>=5

练习二:找到员工表中薪水大于本部门平均薪水的员工。参考结果:

练习二参考结果:员工表中薪水大于本部门平均薪水的员工
-->答案:
SQL> select empno,ename,sal,avgsal
     from emp e, (select deptno,avg(sal) avgsal 
                  from emp 
                  group by deptno) d
     where e.deptno=d.deptno and e.sal> d.avgsal;

=========================引申出相关子查询========================
--相关子查询:将主查询中的某个值作为参数传递给子查询
--一般子查询会先查主查询再查子查询,但相关子查询例外,刚好相反

SQL> select empno, ename, sal, (select avg(sal) from emp where deptno=e.deptno) avgsal
     from emp e
     where sal>(select avg(sal) from emp where deptno=e.deptno);

练习三:统计每年入职的员工个数,参考结果:

练习三参考结果:统计每年入职的员工个数
-->答案:
SQL> select count(*) total,
            sum(decode(to_char(hiredate, 'yyyy'), '1980', 1)) "1980",
            sum(decode(to_char(hiredate, 'yyyy'), '1981', 1)) "1981",
            sum(decode(to_char(hiredate, 'yyyy'), '1982', 1)) "1982",
            sum(decode(to_char(hiredate, 'yyyy'), '1987', 1)) "1987"
     from emp;
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 开始了新的生活,我像是一夜之间变了个人:我不再享受安静,不再手捧着书,像个火药桶一般,一般不小心踩我一脚,...
    她就是我的太阳阅读 147评论 0 0
  • 那些稀罕、贵重之物并不足以称之为珍品。 对人最珍贵的三样东西,由内到外为: 一、身体。 二、事业。 三、亲近之人。...
    李廷未阅读 196评论 0 0