oracle数据库面试笔试试题总结

  Oracle数据库

oracle数据库面试笔试试题总结

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 * from emp 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 年前雇的员工

select * 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;

列出员工表中每个部门的员工数,和部门 no

Select count(*),deptno from emp group by deptno;

得到工资大于自己部门平均工资的员工信息

select * from emp e1,(select deptno,avg(sal) as avgsal from emp group by deptno) e2

where no=no and > al;

分组统计每个部门下,每种职位的平均奖金(也要算没奖金的人)和总工资(包括奖金) select deptno,job,avg(nvl(comm,0)),sum(sal+nvl(comm,0)) from emp group by deptno,job;

4.多表联查

列出员工表中每个部门的员工数,和部门 no

select deptno,count(*) from emp group by deptno;

列出员工表中每个部门的员工数(员工数必须大于 3) ,和部门名称

select d.* , from dept d,(select deptno,count(*) cou from emp group by deptno having count(*)>3) ed where no=no;

找出工资比 jones 多的员工

select * from emp where sal>=(select sal from emp where

lower(ename)=jones);

列出所有员工的姓名和其上级的姓名

select e as lower ,e as upper from emp e1,emp e2 where

= o;

select e as lower ,e as upper from emp e1,emp e2 where = o(+);

以职位分组,找出平均工资最高的两种职位

Select * from ( select avg(sal) from emp order by job desc ) where rownum<3; 20="" select="" e="" from="" emp="" dept="" d="" where="" and="" ="">(select max(sal) from

emp where deptno=20) and no=no

得到平均工资大于 2000 的工作职种

select job from emp group by job having avg(sal) > 2000;

分部门得到工资大于 2000 的所有员工的平均工资,并且平均工资还要大于 2500 select deptno,avg(sal) from emp where sal>2000 group by deptno having avg(sal)>2500;

得到每个月工资总数最少的那个部门的部门编号,部门名称,部门位置 select * from dept

where

deptno = (

select no from

(select deptno,sum(sal) from emp group by deptno order by sum(sal)) e

where rownum=1

);