oracle面试.docx
《oracle面试.docx》由会员分享,可在线阅读,更多相关《oracle面试.docx(10页珍藏版)》请在冰豆网上搜索。
oracle面试
竭诚为您提供优质文档/双击可除
oracle,面试
篇一:
oracle精选面试题(附答案及分析)
oracle精选面试题
1.查询员工表所有数据,并说明使用*的缺点
答案:
select*fromemp;
使用*的缺点有:
查询出了不必要的列;效率上不如直接指定列名。
2.查询职位(job)为pResident的员工的工资
答案:
select*fromempwherejob=pResident;
3.查询佣金(comm)为0或为null的员工信息
答案:
select*fromempwherecomm=0orcommisnull;
4.查询入职日期在1981-5-1到1981-12-31之间的所有员工信息
答案:
select*fromempwherehiredate
betweento_date(1981-5-1,yyyy-mm-dd)andto_date(1981-12-31,yyyy-mm-dd);
5.查询所有名字长度为4的员工的员工编号,姓名
答案:
select*fromempwherelength(ename)=4;
6.显示10号部门的所有经理(manageR)和20号部门的所有职员(cleRk)的详细信息答案:
select*fromempwheredeptno=10andjob=manageRordeptno=20andjob=cleRk;
7.显示姓名中没有l字的员工的详细信息或含有sm字的员工信息
答案:
select*fromempwhereenamenotlike%l%orenamelike%sm%;
8.显示各个部门经理(manageR)的工资
答案:
selectsalfromempwherejob=manageR;
9.显示佣金(comm)收入比工资(sal)高的员工的详细信息
答案:
select*fromempwherecomm>sal;
10.把hiredate列看做是员工的生日,求本月过生日的员工
答案:
select*fromempwhereto_char(hiredate,mm)=to_char(sysdate,mm);
11.把hiredate列看做是员工的生日,求下月过生日的员工
答案:
select*fromempwhereto_char(hiredate,mm)=to_char(add_months(sysdate,1),mm);
12.求1982年入职的员工
答案:
select*fromempwhereto_char(hiredate,yyyy)=1982;
13.求1981年下半年入职的员工
答案:
select*fromempwherehiredate
betweento_date(1981-7-1,yyyy-mm-dd)andto_date(1982-1-1,yyyy-mm-dd)-1;
14.求1981年各个月入职的的员工个数
答案:
selectcount(*),to_char(trunc(hiredate,month),yyyy-mm)
fromempwhereto_char(hiredate,yyyy)=1981
groupbytrunc(hiredate,month)
orderbytrunc(hiredate,month);
15.查询各个部门的平均工资
答案:
selectdeptno,avg(sal)fromempgroupbydeptno;
16.显示各种职位的最低工资
答案:
selectjob,min(sal)fromempgroupbyjob;
17.按照入职日期由新到旧排列员工信息
答案:
select*fromemporderbyhiredatedesc;
18.查询员工的基本信息,附加其上级的姓名
答案:
selecte.*,e2.enamefromempe,empe2wheree.mgr=e2.empno;
19.显示工资比allen高的所有员工的姓名和工资
答案:
select*fromempwheresal>(selectsalfromempwhereename=allen);
20.显示与scott从事相同工作的员工的详细信息
select*fromempwherejob=(select*fromempwhereename=scott);
21.显示销售部(sales)员工的姓名
答案:
selectenamefromempe,deptdwheree.deptno=d.deptnoandd.dname=sales;
22.显示与30号部门maRtin员工工资相同的员工的姓名和工资
答案:
selectename,salfromemp
wheresal=(selectsalfromempwheredeptno=30andename=maRtin);
23.查询所有工资高于平均工资(平均工资包括所有员工)的销售人员(salesman)
答案:
select*fromempwherejob=salesmanandsal>(selectavg(sal)fromemp);
24.显示所有职员的姓名及其所在部门的名称和工资
答案:
selectename,job,dnamefromempe,deptdwheree.deptno=d.deptno;
25.查询在研发部(ReseaRch)工作员工的编号,姓名,工作部门,工作所在地
答案:
selectempno,ename,dname,locfromempe,deptd
wheree.deptno=d.deptnoanddanme=ReseaRch;
26.查询各个部门的名称和员工人数
答案:
select*from(selectcount(*)c,deptnofromempgroupbydeptno)e
innerjoindeptdone.deptno=d.deptno;
27.查询各个职位员工工资大于平均工资(平均工资包括所有员工)的人数和员工职位
答案:
selectjob,count(*)fromempwheresal>(selectavg(sal)fromemp)groupbyjob;
28.查询工资相同的员工的工资和姓名
答案:
select*fromempewhere(selectcount(*)fromempwheresal=e.salgroupbysal)>1;
29.查询工资最高的3名员工信息
答案:
select*from(select*fromemporderbysaldesc)whererownum 30.按工资进行排名,排名从1开始,工资相同排名相同(如果两人并列第1则没有第2名,从第三名继
答案:
selecte.*,(selectcount(*)fromempwheresal>e.sal)+1rankfromempeorderbyrank;
31.求入职日期相同的(年月日相同)的员工
答案:
select*fromempewhere(selectcount(*)fromempwheree.hiredate=hiredate)>1;
32.查询每个部门的最高工资
答案:
selectdeptno,max(sal)maxsalfromempgroupbydeptnoorderbydeptno;
33.查询每个部门,每种职位的最高工资
答案:
selectdeptno,job,max(sal)fromempgroupbydeptno,joborderbydeptno,job;
34.查询每个员工的信息及工资级别
答案:
selecte.*,sg.gradefromempe,salgradesgwheresalbetweenlosalandhisal;
35.查询工资最高的第6-10名员工
答案:
select*from(
selecte.*,rownumrnfrom
(select*fromemporderbysaldesc)e
whererownum wherern>5;
36.查询各部门工资最高的员工信息
答案:
select*fromempewheree.sal=(selectmax(sal)fromempwhere(deptno=e.deptno));
37.查询每个部门工资最高的前2名员工
答案:
select*fromempewhere
(selectcount(*)fromempwheresal>e.salande.deptno=deptno) orderbydeptno,saldesc;
38.查询出有3个以上下属的员工信息
答案:
select*fromempewhere
(selectcount(*)fromempwheree.empno=mgr)>2;
39.查询所有大于本部门平均工资的员工信息
答案:
select*fromempewheresal>
(selectavg(sal)fromempwhere(deptno=e.deptno))
orderbydeptno;
40.查询平均工资最高的部门信息
答案:
selectd.*,avgsalfromdeptd,(selectavg(sal)avgsal,deptnofromempgroupbydeptno)sewhereavgsal=(selectmax(avg(sal))fromempgroupbydeptno)andd.deptno=se.deptno;
41.查询大于各部门总工资的平均值的部门信息
答案:
selectd.*,sumsalfromdeptd,(selectsum(sal)sumsal,deptnofromempgroupbydeptno)sewheresumsal>(selectavg(sum(sal))fromempgroupbydeptno)andse.deptno=d.deptno;
42.查询大于各部门总工资的平均值的部门下的员工信息
答案:
selecte.*,sumsalfromempe,(selectsum(sal)sumsal,deptnofromempgroupbydeptno)sewheresumsal>(selectavg(sum(sal))fromempgroupbydeptno)andse.deptno=e.deptno;
43.查询没有员工的部门信息
答案:
selectd.*fromdeptdleftjoinempeon(e.deptno=d.deptno)whereempnoisnull;
44.查询当前月有多少天
答案:
selecttrunc(add_months(sysdate,1),month)-trunc(sysdate,month)fromdual;
45.列出最低薪金大于1500的各种工作及此从事此工作的全部雇员人数
答案:
selectjob,count(empno)
FRome