Oracle精选面试题
1.查询员工表所有数据, 并说明使用*的缺点
答案:
select * from emp;
使用*的缺点有:查询出了不必要的列;效率上不如直接指定列名。
2.sql查询面试题及答案查询职位(JOB)为'PRESIDENT'的员工的工资
答案:
select * from emp where job = 'PRESIDENT';
3.查询佣金(COMM)为0 或为NULL 的员工信息
答案:
select * from emp where comm = 0 or comm is null;
4.查询入职日期在1981-5-1 到1981-12-31 之间的所有员工信息
答案:
select * from emp where hiredate
between to_date('1981-5-1','yyyy-mm-dd') and to_date('1981-12-31','yyyy-mm-dd');
5.查询所有名字长度为4 的员工的员工编号,姓名
答案:
select * from emp where length(ename) = 4;
6.显示10 号部门的所有经理('MANAGER')和20 号部门的所有职员('CLERK')的详细信息
答案:
select * from emp where deptno = 10 and job = 'MANAGER' or deptno = 20 and job ='CLERK';
7.显示姓名中没有'L'字的员工的详细信息或含有'SM'字的员工信息
答案:
select * from emp where ename not like '%L%' or ename like '%SM%';
8.显示各个部门经理('MANAGER')的工资
答案:
select sal from emp where job = 'MANAGER';
9.显示佣金(COMM)收入比工资(SAL)高的员工的详细信息
答案:
select * from emp where comm > sal;
10.把hiredate 列看做是员工的生日,求本月过生日的员工
答案:
select * from emp where to_char(hiredate, 'mm') = to_char(sysdate , 'mm');
11.把hiredate 列看做是员工的生日,求下月过生日的员工
答案:
select * from emp where to_char(hiredate, 'mm') = to_char(add_months(sysdate,1) , 'mm');
12.求1982 年入职的员工
答案:
select * from emp where to_char(hiredate,'yyyy') = '1982';
13.求1981 年下半年入职的员工
答案:
select * from emp where hiredate
between to_date('1981-7-1','yyyy-mm-dd') and to_date('1982-1-1','yyyy-mm-dd') - 1;
14.求1981 年各个月入职的的员工个数
答案:
select count(*), to_char(trunc(hiredate,'month'),'yyyy-mm')
from emp where to_char(hiredate,'yyyy')='1981'
group by trunc(hiredate,'month')
order by trunc(hiredate,'month');
15.查询各个部门的平均工资
答案:
select deptno,avg(sal) from emp group by deptno;
16.显示各种职位的最低工资
答案:
select job,min(sal) from emp group by job;
17.按照入职日期由新到旧排列员工信息
答案:
select * from emp order by hiredate desc;
18.查询员工的基本信息,附加其上级的姓名
答案:
select e.*, e2.ename from emp e, emp e2 = e2.empno;
19.显示工资比'ALLEN'高的所有员工的姓名和工资
答案
select * from emp where sal > (select sal from emp where ename='ALLEN');
20.显示与'SCOTT'从事相同工作的员工的详细信息
答案:
select * from emp where job = (select * from emp where ename='SCOTT');
21.显示销售部('SALES')员工的姓名
答案:
select ename from emp e, dept d where e.deptno = d.deptno and d.dname='SALES';
22.显示与30 号部门'MARTIN'员工工资相同的员工的姓名和工资
答案:
select ename, sal from emp
where sal = (select sal from emp where deptno=30 and ename='MARTIN');
23.查询所有工资高于平均工资(平均工资包括所有员工)的销售人员('SALESMAN')
答案:
select * from emp where job='SALESMAN' and sal > (select avg(sal) from emp);
24.显示所有职员的姓名及其所在部门的名称和工资
答案:
select ename, job, dname from emp e, dept d where e.deptno = d.deptno;
25.查询在研发部('RESEARCH')工作员工的编号,姓名,工作部门,工作所在地
答案:
select empno,ename,dname,loc from emp e, dept d
where e.deptno = d.deptno and danme='RESEARCH';
26.查询各个部门的名称和员工人数
答案:
select * from (select count(*) c, deptno from emp group by deptno) e
inner join dept d on e.deptno = d.deptno;
27.查询各个职位员工工资大于平均工资(平均工资包括所有员工)的人数和员工职位
答案:
select job, count(*) from emp where sal > (select avg(sal) from emp) group by job;
28.查询工资相同的员工的工资和姓名
答案:
select * from emp e where (select count(*) from emp where sal = e.sal group by sal) > 1;
29.查询工资最高的3 名员工信息
答案:
select * from (select * from emp order by sal desc) where rownum <= 3;
30.按工资进行排名,排名从1 开始,工资相同排名相同(如果两人并列第1 则没有第2 名,从第三名继续排)
答案:
select e.*, (select count(*) from emp where sal > e.sal)+1 rank from emp e order by rank;
31.求入职日期相同的(年月日相同)的员工
答案:
select * from emp e where (select count(*) from emp where e.hiredate=hiredate)>1;
32.查询每个部门的最高工资
答案:
select deptno, max(sal) maxsal from emp group by deptno order by deptno;
33.查询每个部门,每种职位的最高工资
答案:
select deptno, job, max(sal) from emp group by deptno, job order by deptno, job;
34.查询每个员工的信息及工资级别
答案:
select e.*, sg.grade from emp e, salgrade sg where sal between losal and hisal;
35.查询工资最高的第6-10 名员工
答案:
select * from (
select e.*,rownum rn from
(select * from emp order by sal desc) e
where rownum <=10)
where rn > 5;
36.查询各部门工资最高的员工信息
答案:
select * from emp e where e.sal = (select max(sal) from emp where (deptno = e.deptno));
37.查询每个部门工资最高的前2 名员工
答案:
select * from emp e where
(select count(*) from emp where sal > e.sal and e.deptno = deptno) < 2
order by deptno, sal desc;
38.查询出有3 个以上下属的员工信息
答案:
select * from emp e where
(select count(*) from emp pno = mgr) > 2;
39.查询所有大于本部门平均工资的员工信息
答案:
select * from emp e where sal >
(select avg(sal) from emp where (deptno = e.deptno))
order by deptno;
40.查询平均工资最高的部门信息

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。