oracle資料庫面試筆試試題總結

才智咖 人氣:2.23W

  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

);