Oracle精选面试题及答案

1.       查询员工表所有数据, 并说明使用*的缺点

答案:

select * from emp;

使用*的缺点有:查询出了不必要的列;效率上不如直接指定列名。

2.       查询职位(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 where e.mgr = 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 byrank;

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 where e.empno = mgr) > 2;

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

答案:

select * from emp e where sal >

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

order by deptno;

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

答案:

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

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

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

答案:

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

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

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

答案:

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

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

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

答案:

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

44.    查询当前月有多少天

答案:

select trunc(add_months(sysdate,1),'month') - trunc(sysdate,'month') from dual;

45.    列出最低薪金大于1500的各种工作及此从事此工作的全部雇员人数

答案:

SELECT job,COUNT(empno)

FROM emp

GROUP BY job HAVING MIN(sal)>1500 ;

46.    列出薪金高于公司平均薪金的所有员工,所在部门,上级领导,公司的工资等级

答案:

SELECT e.empno,e.ename,d.dname,m.ename,s.grade

FROM emp e,dept d,emp m,salgrade s

WHERE sal>(SELECT AVG(sal) FROM emp) AND e.mgr=m.empno AND d.deptno=e.deptno(+)AND e.sal BETWEEN s.losal AND s.hisal ;

47.    列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金、部门名称

答案:

SELECT e.ename,e.sal,d.dname FROM emp e,dept d

WHERE sal > ALL (SELECT sal FROM emp WHERE deptno=30) AND e.deptno=d.deptno;

48.    列出所有部门的详细信息和部门人数

答案:

SELECT d.dname,d.loc,dt.count

FROM dept d,(SELECT deptno,COUNT(*) count FROM emp GROUP BY deptno) dt

WHERE d.deptno=dt.deptno ;

49.    显示非销售人员工作名称以及从事同一工作雇员的月工资的总和,并且要满足从事同一工作的雇员的月工资合计大于$5000,输出结果按月工资的合计升序排列

答案:

SELECT job,SUM(sal) sum

FROM emp

WHERE job<>'SALESMAN'

GROUP BY job HAVING sum>5000

ORDER BY sum ;

50.    客户表a(id name address) 登陆流水表b(id time) 购物流水表c(id time productid productnum)
1.求每个客户的最新登陆时间time,姓名name,客户id?

答案:

select a.id,a.name,d.time as time 
from a left join (select id,max(time) as time from b group by id) d
on a.id =d.id ;

2.查最新登陆并且已经购买商品的客户id,name,登陆的时间time(一条sql语句)

答案:

select a.id,a.name,d.time as time 
from a,(select id,max(time) as time from b group by id) d
where a.id =d.id 
and exists (select * from c where id = a.id);

  • 10
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle数据库面试题答案2020 1. Oracle数据库的存储结构是什么?如何进行逻辑划分? Oracle数据库的存储结构包括表空间、数据文件、段和块。表空间是逻辑存储单位,数据文件是实际存储数据的物理文件。段是多行的数据组织,是一种逻辑单位,可以由多个块组成。块是数据在物理存储层面的最小单位,每个块的默认大小为8KB。 逻辑划分可以通过创建多个表空间来实现,每个表空间可以包含多个数据文件,可以根据不同的需求对数据进行逻辑划分和管理。 2. 如何创建Oracle数据库中的用户? 使用CREATE USER语句可以创建一个新的用户。语法如下: CREATE USER username IDENTIFIED BY password; 3. 如何备份和还原Oracle数据库? 备份Oracle数据库可以使用RMAN(Recovery Manager)工具。可以使用RMAN备份命令进行备份,如: RMAN> BACKUP DATABASE; 还原Oracle数据库可以使用RMAN工具进行恢复,可以使用RMAN的RESTORE和RECOVER命令完成还原操作。 4. 如何在Oracle数据库中创建索引?有几种类型的索引? 可以使用CREATE INDEX语句创建索引。语法如下: CREATE INDEX index_name ON table_name (column_name); Oracle数据库中有几种类型的索引,包括B树索引、位图索引和函数索引。 5. 如何查询Oracle数据库的版本信息? 可以通过执行如下SQL语句查询Oracle数据库的版本信息: SELECT * FROM V$VERSION; 以上是一些常见的Oracle数据库面试题答案,希望对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值