Oracle查询语句面试题(一)

2014-11-24 18:56:08 · 作者: · 浏览: 17

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


select * from emp;


01.查询职(job)为'PRESIDENT'的员工的工资


select sal from emp where job='PRESIDENT';


02.查询佣金为0或为null的员工的信息


select * from emp where comm is null or comm=1;


03.查询入职日期在1981-5-1到1981-12-31之间的所有员工的信息


select * from emp where hiredate between to_date(‘1-5月-81’) and to_date(‘31-12月-81’)


04..查询所有名字长度为4的员工的员工的编号,姓名


select empno,ename from emp where length(ename)=4


05.显示10号部门饿所有经理和20号部门的所有员工


select * from emp where job='MANAGER' and deptno=10 or job='CLERK' and deptno=20;


06.显示姓名没有'L'字的员工的详细信息或含有'SM'字的员工信息


select * from emp where ename not like '%L%' or ename like '%SM%';


07.显示各个部门经理的工资


select deptno,sal from emp where job='MANAGER';


08.显示佣金收入比工资高的员工的详细信息


select * from emp where comm>sal;


10.把hiredate列看做是员工的生日,求本月过生日的员工:


SQL> select * from emp


where to_char(hiredate,'mm')=to_char(sysdate,'mm');


11.把hiredate列看做是员工的生日,求下月过生日的员工


SQL> select * from emp


where to_char(hiredate,'mm')=to_char(add_months(sysdate,1


),'mm');


12.求1982年入职的员工


SQL> select * from emp where to_char(hiredate,'yyyy')='1982';


hiredate是date类型的,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;


注:to_char()函数和to_date()函数


to_char()函数是把日期的类型转换为指定的格式


to_date()是把字符串转换为日期类型


-1的原因是更精确


14.求1981年各个月入职的员工个数


SQL> select to_char(hiredate,'mm'),count(*) from emp where to_char(hiredate,'yyy


y')='1981' group by to_char(hiredate,'mm') order by to_char(hiredate,'mm');



select to_char(hiredate,'mm'),count(*) from emp where to_char(hiredate,'yyyy')='1981' group by to_char(hiredate,'mm') order by to_char(hiredate,'mm');


PartII


01 .查询各个部门的平均工资


SQL> select deptno,avg(nvl(sal,0)) from emp group by deptno;


02.显示各种职位的最低工资


SQL> select job,min(sal) from emp group by job;


03.按照入职日期由新到旧排列员工信息


SQL> select hiredate from emp order by hiredate desc;


04.查询员工的基本信息,附加其上级的姓名(自关联)


SQL> select e.*,e1.ename from emp e,emp e1 where e.mgr=e1.empno;


05.显示工资比’ALLEN’高的所有员工的姓名和工作


SQL> select ename,sal from emp where sal>(


select sal from emp where ename='ALLEN');


06.显示与scott从事相同工作的员工的信息(子查询)


SQL> select * from emp where job=(


select job from emp where ename='SCOTT');


07.显示销售部(‘SALES’)员工的姓名


SQL> select e.ename from emp e inner join dept d on e.deptno=d.deptno where d.dname='SALES';


08.显示与30号门’MARTIN’员工工资相同的员工的姓名和工资


SQL> select ename,sal from emp where sal=(select sal from emp where deptno=30 and ename='MARTIN');


09.查询所有工资高于平均工资(包括所有员工)的销售人员


SQL> select * from emp where sal>(


select avg(sal) from emp) and job='SALESMAN';



SQL> select * from emp where job='SALESMAN' and sal>(


select avg(sal) from emp);


10.显示所有职员的姓名及其所在部门的名称和工资(表连接)


SQL> select e.*,e.sal,d.dname from emp e inner join dept d on e.deptno=d.deptno;


11.查询在研发部(RESEARCH)工作人员的编号,姓名,工作部门,工作所在地


SQL> select e.empno,e.ename,d.dname,d.loc from emp e inner join dept d on e.deptno=d.deptno where dname='RESEARCH';


12.查询各个部门的名称和员工人数


select e.deptno,d.dname,count(*) from emp e inner join dept d on e.deptno=d.deptno group by e.deptno,d.dname


分析:


SQL> select d.dname from emp e inner join dept d on e.deptno=d.deptno group by e.deptno,d.dname;


DNAME


--------------


ACCOUNTING


RESEARCH


SALES


SQL> select e.deptno,d.dname from emp e inner join dept d on e.deptno=d.deptno group by e.deptno,d.dname;


DEPTNO DNAME


------ --------------


10 ACCOUNTING


20 RESEARCH


30 SALES


SQL> select e.deptno,d.dname,count(*) from emp e inner join dept d on e.d