oracle面试题整理二(10级学员 乔宇整理)

标签: oracle面试joinnull
2455人阅读 评论(0) 收藏 举报
分类:

oracle面试题整理二(10级学员 乔宇整理)

1.查询工资最高的3 名员工信息

select * from (select * from emp order by sal desc) where rownum <= 3;

分析我们先按照这个表中的工资降序排列,然后使用伪列也就是这个rownum来取前三个

2. 按工资进行排名,排名从1 开始,工资相同排名相同(如果两人并列第1 则没有第2 名,从第

三名继续排)

     select rank() over(order by sal) from emp;

分析,其中用到一个rank() over的函数,自己在网上查一下就知道了,很简单的!

3. 求入职日期相同的(年月日相同)的员工

select * from emp e where (select count(*) from emp where e.hiredate=hiredate)>1;

分析,就是按照出生日期分组,然后按里面有一个重复的,如果大于1,也就是说有重复的那么我们就查出来

4. 查询每个部门的最高工资

select deptno, max(sal) maxsal from emp group by deptno order by deptno;

分析这个没有什么要说的了,只要会分组就会了

5. 查询每个部门,每种职位的最高工资

select deptno, job, max(sal) from emp group by deptno, job order by deptno, job;

分析这个和18一样的了

6. 查询每个员工的信息及工资级别(用到表Salgrade)

select * from salgrade;

select e.*, sg.grade from emp e, salgrade sg where sal between losal and hisal;

 

这个题目就是考察你的基础呢?呵呵很简单的

7. 查询工资最高的第6-10 名员工

select * from (

select e.*,rownum rn from

(select * from emp order by sal desc) e

where rownum <=10)

where rn > 5;

这个题目很有意思的啊,好好的分析一下

我们首先查询里面的 select * from emp order by sal desc 就是按照降序查询,然后查出来伪列小于10的所有记录,然后我们在查询一次再找出记录大于五的,我们就知道了.

8. 查询各部门工资最高的员工信息

select * from emp e where e.sal = (select max(sal) from emp where (deptno = e.deptno));

首先查出来每个部分工资最高的然后根据序号对应得出各个部门的工资最高的员工信息

9. 查询每个部门工资最高的前2 名员工

select * from (

select rank() over (partition by deptno order by sal desc) rank, e.* from emp e

) where rank < 3;

这里解释一下,我们先用rank() over这个函数按照部门分组其中的工资降序,然后找到每个部门前两个就是了

10. 查询出有3 个以上下属的员工信息

select * from emp e where

(select count(*) from emp where e.empno = mgr) > 2;

分析,我们先找出来所有下属,然后用count函数统计每个下属的个数,然后看大于2的即可

11. 查询所有大于本部门平均工资的员工信息()

select * from emp e where sal >

(select avg(sal) from emp where (deptno = e.deptno))

order by deptno;

 

分析,先查出来每个部门的平均工资,然后根据部门相等,对应的写上即可

12. 查询平均工资最高的部门信息

select d.*, avgsal from dept d, (select avg(sal) avgsal, deptno from emp group by deptno) se

where avgsal = (select max(avg(sal)) from emp group by deptno) and d.deptno = se.deptno;

分析:

步骤1:求每个部门的平均工资:

select avg(sal) avgsal, deptno from emp group by deptno;

步骤2:求最高的平均工资:

select max(avg(sal)) from emp group by deptno;

步骤3:求平均工资最高的部门信息,连接步骤1 产生的临时表与真实表dept:

select d.*, avgsal from dept d, (select avg(sal) avgsal, deptno from emp group by deptno) se

where avgsal = (select max(avg(sal)) from emp group by deptno) and d.deptno = se.deptno;

13. 查询大于各部门总工资的平均值的部门信息

select d.*,sumsal from dept d, (select sum(sal) sumsal, deptno from emp group by deptno) se

where sumsal >(select avg(sum(sal)) from emp group by deptno) and se.deptno = d.deptno;

分析:

步骤1:求每个部门总工资

select sum(sal) sumsal, deptno from emp group by deptno;

步骤2:求每总工资平均值

select avg(sum(sal)) from emp group by deptno;

步骤3:求大于总工资平均值的部门信息,连接步骤1 产生的临时表与真实表dept:

select d.*,sumsal from dept d, (select sum(sal) sumsal, deptno from emp group by deptno) se

where sumsal >(select avg(sum(sal)) from emp group by deptno) and se.deptno = d.deptno;

14. 查询大于各部门总工资的平均值的部门下的员工信息(考察知识点:子查询,组函数,连接

查询)

select e.*,sumsal from emp e, (select sum(sal) sumsal, deptno from emp group by deptno) se

where sumsal >(select avg(sum(sal)) from emp group by deptno) and se.deptno = e.deptno;

 

这个题目呢,我们分析的时候是这样的,我们查找出来每个部门的总工资的平均工资,然后再查找出来每个部门的总工资,比较一下,然后根据部门号相等,就能算出来了

15. 查询没有员工的部门信息

select d.* from dept d left join emp e on (e.deptno = d.deptno) where empno is null;

分析,这个部门充分的利用了左连接的特点,自己分析一下即可.

 

如有质疑发送问题到qiaoshemei@163.com

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1893156次
    • 积分:16644
    • 等级:
    • 排名:第604名
    • 原创:209篇
    • 转载:76篇
    • 译文:0篇
    • 评论:703条
    最新评论