2018/5/31 oracle数据库面试笔试试题总结
http://www.yjbys.com/qiuzhizhinan/show-308759.html 1/4Oracle数据库1.基础测试选择在部门 30 中员工的所有信息Select * from emp where deptno=30;列出职位为(MANAGER)的员工的编号,姓名Select empno,ename from emp where job = ?Manager ?;找出奖金高于工资的员工Select * from emp where comm>sal;找出每个员工奖金和工资的总和Select sal+comm,ename from emp;找出部门 10 中的经理(MANAGER)和部门 20 中的普通员工(CLERK)Select * from emp where (deptno=10 and job=?MANAGER?) or (deptno=20 and job=?CLERK?);找出部门 10 中既不是经理也不是普通员工,而且工资大于等于 2000 的员工 Select * fromemp where deptno=10 and job not in(?MANAGER?,?CLERK) ? and sal>=2000;找出有奖金的员工的不同工作Select distinct job from emp where comm is not null and comm>0找出没有奖金或者奖金低于 500 的员工Select * from emp where comm<500 or comm is null;显示雇员姓名,根据其服务年限,将最老的雇员排在最前面select ename from emp order by hiredate ;2.函数测试找出每个月倒数第三天受雇的员工(如:2009-5-29)select * from emp where last_day(hiredate)-2=hiredate;找出 25 年前雇的员工2018/5/31 oracle数据库面试笔试试题总结http://www.yjbys.com/qiuzhizhinan/show-308759.html 2/4select * from emp where hiredate<=add_months(sysdate,-25*12);< p="">所有员工名字前加上 Dear ,并且名字首字母大写select Dear || initcap(ename) from emp;找出姓名为 5 个字母的员工select * from emp where length(ename)=5;找出姓名中不带 R 这个字母的员工select * from emp where ename not like %R%;显示所有员工的姓名的第一个字select substr(ename,0,1) from emp;显示所有员工,按名字降序排列,若相同,则按工资升序排序假设一个月为 30 天,找出所有员工的日薪,不计小数找到 2 月份受雇的员工select * from emp where to_hiredate,fmmm)=2;3.分组函数
分组统计各部门下工资>500 的员工的平均工资、Select avg(sal) from emp where sal>500 group by deptno ;统计各部门下平均工资大于 500 的部门select deptno,avg(sal) from emp group by deptno having avg(sal)>500 ;算出部门 30中得到最多奖金的员工奖金
Select max(comm) from emp where deptno = 30 ;算出部门 30 中得到最多奖金的员工姓名select ename from emp where comm = (select max(comm) from emp where deptno=30);算出每个职位的员工数和最低工资Select job,min(sal),count(*) from emp group by job;列出员工表中每个部门的员工数,和部门 no2018/5/31 oracle数据库面试笔试试题总结http://www.yjbys.com/qiuzhizhinan/show-308759.html 3/4Select count(*),deptno from emp group by deptno;得到工资大于自己部门平均工资的员工信息select * from emp e1,(select deptno,avg(sal) as avgsal from emp group by deptno) e2where e1.deptno=e2.deptno and e1.sal > e2.avgsal;分组统计每个部门下,每种职位的平均奖金(也要算没奖金的人)和总工资(包括奖金) selectdeptno,job,avg(nvl(comm,0)),sum(sal+nvl(comm,0)) from emp group by deptno,job;4.多表联查列出员工表中每个部门的员工数,和部门 noselect deptno,count(*) from emp group by deptno;列出员工表中每个部门的员工数(员工数必须大于 3) ,和部门名称select d.* ,ed.cou from dept d,(select deptno,count(*) cou from emp group by deptnohaving count(*)>3) ed where d.deptno=ed.deptno;找出工资比 jones 多的员工select * from emp where sal>=(select sal from emp wherelower(ename)=jones);列出所有员工的姓名和其上级的姓名select e1.ename as lower ,e2.ename as upper from emp e1,emp e2 where e1.mgr= e2.empno;select e1.ename as lower ,e2.ename as upper from emp e1,emp e2 where e1.mgr =e2.empno(+); 以职位分组,找出平均工资最高的两种职位Select * from ( select avg(sal) from emp order by job desc ) where rownum<3; 20=""select="" d.dname="" from="" emp="" dept="" d="" where="" and="" e.sal="">(selectmax(sal) fromemp where deptno=20) and e.deptno=d.deptno得到平均工资大于 2000 的工作职种2018/5/31 oracle数据库面试笔试试题总结http://www.yjbys.com/qiuzhizhinan/show-308759.html 4/4select job from emp group by job having avg(sal) > 2000;分部门得到工资大于 2000 的所有员工的平均工资,并且平均工资还要大于 2500 selectdeptno,avg(sal) from emp where sal>2000 group by deptno having avg(sal)>2500;得到每个月工资总数最少的那个部门的部门编号,部门名称,部门位置 select * from deptwheredeptno = (select e.deptno from(select deptno,sum(sal) from emp group by deptno order by sum(sal)) ewhere rownum=1);