Oracle面试题(附答案及分析)_oracle面试题及答案
Oracle面试题(附答案及分析)由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“oracle面试题及答案”。
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')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 addre)登陆流水表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);