Oracle針對EMP表的練習題(很有用,值得收藏)

1.查詢所有的部門編號:
select DEPTNO from DEPT ;

2.查詢所有有人的部門編號:
select DEPTNO from EMP ;

3.查詢所有崗位名稱:
select DISTINCT “JOB” from EMP ;

4.查詢所有薪水超過兩千的員工信息
select * from EMP where SAL>2000;

5.查詢所有20部門的員工姓名,編號及薪水
select ENAME,EMPNO,SAL from EMP where DEPTNO=20;

6.查詢所有沒有獎金的員工信息
select * from EMP where (COMM is NULL OR COMM = 0);

7.查詢所有有獎金的員工信息
select * from EMP where (COMM is NOT NULL );

8.查詢最高領導的員工信息
select * from EMP where MGR is NULL;

9.查詢所有81年之後入職的員工信息
select * from EMP where HIREDATE >= “TO_DATE”(‘1981-01-01’,’yyyy-mm-dd’);
select * from EMP where HIREDATE >= ‘1-1月-81’;

10.查詢所有薪水在2000-4000範圍內的員工信息
select * from EMP where SAL BETWEEN 2000 AND 4000;

11.查詢所有部門編號是10或30的員工信息
select * from EMP where DEPTNO IN (10,30);

12.查詢所有20部門並且薪水超過2000的員工信息:
select * from EMP where DEPTNO = 20 AND SAL > 2000;

13.查詢所有薪水不在2000-4000範圍內的員工信息
select * from EMP where SAL NOT BETWEEN 2000 AND 4000;

14.查詢所有部門編號不是10,30的員工信息
select * from EMP where DEPTNO NOT IN (10,30);

15.查詢用戶名爲scott的員工信息:注意區分大小寫
select * from EMP where ENAME = ‘SCOTT’;

16.查詢姓名裏面包含ALL的員工姓名
select ENAME from EMP WHERE ENAME LIKE ‘%ALL%’;

17.查詢所有以”S”開頭的同學
select * from EMP WHERE ENAME LIKE ‘S%’;

18.查詢第二個字母爲A的員工姓名
select ENAME from EMP WHERE ENAME LIKE ‘_A%’;

19.查詢所有員工的編號、姓名、部門編號、職位、薪水,按照薪水降序排列
select EMPNO,ENAME,DEPTNO,”JOB”,SAL from EMP ORDER BY SAL DESC;

20.查詢所有員工信息,按照部門降序排列,部門內按照薪水升序排列
select * from EMP ORDER BY DEPTNO DESC,SAL ASC;

21.查詢姓名中包含‘A’員工的姓名,編號,薪水,按照薪水降序排列
select ENAME,EMPNO,SAL from EMP WHERE ENAME LIKE ‘%A%’ ORDER BY SAL DESC;

22.查詢年收入超過10000的員工的姓名,編號,薪水,年收入,按照年收入降序排列
SELECT ENAME,EMPNO,SAL,(SAL+”NVL”(COMM, 0))*12 AS YEARSAL
FROM EMP WHERE (SAL+”NVL”(COMM, 0))*12 > 10000 ORDER BY YEARSAL DESC;

23.查詢年薪超過10000的員工的姓名,編號,薪水,年收入,按照年薪降序排列
SELECT ENAME,EMPNO,SAL,SAL*12 AS YEARSAL
FROM EMP WHERE SAL*12 > 10000 ORDER BY YEARSAL DESC;

後續練習題:

24.查詢僱員表中,姓名爲SMITH的僱員,截止到今天共工作了多少周,則可以使用如下的SQL語句
SELECT ROUND((SYSDATE-HIREDATE)/7) AS “Weeks” FROM EMP WHERE ENAME = ‘SMITH’;

25.查詢各部門的最高薪水、最低薪水、平均薪水….
SELECT DEPTNO,”MAX”(SAL),”MIN”(SAL),”AVG”(SAL) FROM EMP GROUP BY DEPTNO;

26.查詢‘SMITH’的領導姓名
SELECT ENAME FROM EMP WHERE EMPNO = (SELECT MGR FROM EMP WHERE ENAME = ‘SMITH’);

27.查詢部門名稱是‘SALES’的員工信息
SELECT * FROM EMP WHERE DEPTNO = (SELECT DEPTNO FROM DEPT WHERE DNAME = ‘SALES’);

28.查詢公司中薪水最高的員工信息
SELECT * FROM EMP WHERE SAL = (SELECT “MAX”(SAL) FROM EMP);

29.查詢公司所有員工的個數
SELECT “COUNT”(ENAME) FROM EMP ;

30.查詢公司中最高薪水是多少
SELECT “MAX”(SAL) FROM EMP ;

31.查詢公司中平均獎金是多少
SELECT “AVG”(“NVL”(COMM, 0)) FROM EMP ;

32.查詢公司中最晚入職的時間
SELECT “MAX”(HIREDATE) FROM EMP ;

33.查詢公司中有獎金的人數
SELECT “COUNT”(ENAME) FROM EMP WHERE (COMM IS NOT NULL) ;

34.查詢20部門的最高薪水是多少
SELECT “MAX”(SAL) FROM EMP WHERE DEPTNO = 20 ;

35.查詢各部門的平均薪水及部門編號,部門名稱。
SELECT “AVG”(SAL),DNAME,EMP.DEPTNO FROM EMP,DEPT where EMP.DEPTNO = DEPT.DEPTNO GROUP BY DNAME,EMP.DEPTNO;

36.查詢各部門中最高薪水的員工編號,姓名…
select empno , ename,DEPTNO from emp WHERE SAL in (select “MAX”(SAL) from EMP GROUP BY DEPTNO);

37.查詢所有員工姓名中包含‘A’的最高薪水
SELECT “MAX”(SAL) FROM EMP WHERE ENAME LIKE ‘%A%’ ;

38.查詢各崗位的最高薪水,最低薪水。要求只統計薪水>1000的
SELECT “MAX”(SAL),”MIN”(SAL) FROM EMP WHERE SAL > 1000 GROUP BY “JOB”;

39.查詢各部門的平均薪水及部門編號,要求只列出平均薪水>2000
SELECT AVG(SAL),DEPTNO FROM EMP GROUP BY DEPTNO HAVING AVG(SAL) > 2000;

40.查詢各部門的平均薪水及部門編號,要求只有員工姓名中包含
‘A’才參與統計,只列出平均薪水>1500的,按照平均薪水降序排列
SELECT AVG(SAL),DEPTNO FROM EMP where ENAME LIKE ‘%A%’ GROUP BY DEPTNO HAVING AVG(SAL) > 1500 ORDER BY AVG(SAL) DESC;

41.查詢各部門最高薪水的員工信息(有坑)(薪水和部門編號都需要匹配)
select * from EMP where (deptno,SAL) in (select deptno,MAX(sal) from emp GROUP BY DEPTNO);

42.查詢最高薪水的員工信息
SELECT * FROM EMP WHERE SAL = (SELECT “MAX”(SAL) FROM EMP);

43.查詢薪水大於該部門平均薪水的員工信息
select * from emp e1 where sal > (
select avg(sal) from emp e2 where e1.deptno = deptno
);

44.查詢最高薪水的員工信息
SELECT * FROM EMP WHERE SAL = (SELECT “MAX”(SAL) FROM EMP);
45.查詢各部門最高薪水的員工信息
select * from EMP where (deptno,SAL) in (select deptno,MAX(sal) from emp GROUP BY DEPTNO);

46.查詢‘SMITH’的領導姓名
select ENAME from EMP where EMPNO = (select MGR from EMP where ENAME = ‘SMITH’) ;

47.查詢部門名稱是‘SALES’的員工信息
select * from EMP where DEPTNO = (SELECT DEPTNO FROM DEPT WHERE dname = ‘SALES’) ;

48.查詢公司中薪水最高的員工信息
select * from EMP where SAL = (SELECT MAX(SAL) FROM EMP) ;

49.查詢薪水等級爲4的員工信息
select * from emp where sal between
(select LOSAL from salgrade where grade = 4) AND
(select HISAL from salgrade where grade = 4) ;

50.查詢領導者是‘BLAKE’的員工信息
select * from emp where MGR = (select EMPNO from emp where ENAME = ‘BLAKE’);

51.查詢最高領導者的薪水等級
select grade FROM SALGRADE where (SELECT SAL from emp where mgr is NULL) BETWEEN LOSAL AND HISAL;

52.查詢薪水最低的員工信息
select * from emp where SAL = (select MIN(sal) from emp);

53.查詢和SMITH工作相同的員工信息
select * from emp where JOB = (select JOB from emp where ENAME = ‘SMITH’) ;

54.查詢不是領導的員工信息
select * from emp where EMPNO not in (SELECT “NVL”(MGR, 0) FROM EMP) ;

select * from emp e1 where not EXISTS
(select * from emp e2 where e2.mgr = e1.empno);

55.查詢平均工資比10部門低的部門編號
select deptno from emp group by deptno having avg(sal) <
(select avg(sal) from emp where deptno = 10);

56.查詢在紐約工作的所有員工
select * from EMP where DEPTNO = (select DEPTNO from DEPT where LOC = ‘NEW YORK’);

57.查詢‘SALES’部門平均薪水的等級
select grade from SALGRADE where
(select AVG(SAL) from emp where DEPTNO =
(select DEPTNO FROM DEPT WHERE dname = ‘SALES’) ) BETWEEN LOSAL AND HISAL;

58.查詢10號部門的員工在整個公司中所佔的比例:
select (select COUNT(DEPTNO) from EMP where DEPTNO = 10) / (select COUNT(*) from EMP) FROM dual;

59.每頁顯示5條。
顯示第一頁內容:
select rownum rn,EMP.* from emp where rownum <= 5;
顯示第二頁的內容:
select * from
(select rownum rn,EMP.* from emp where rownum <= 10)
where rn > 5;
按照薪水降序排列,每頁顯示5條,顯示第二頁的內容:
select emp.* from
(select rownum rn,t1.* from
(select * from emp order by sal desc) t1
where rownum <= 10) emp
where rn > 5;

60.查詢各部門工資大於該部門平均工資的員工信息:
select * from emp e1 where sal > (
select avg(sal) from emp e2 where e1.deptno = deptno
);

61.查詢各崗位工資小於該崗位平均工資的員工信息;
select * from emp e1 where sal < (select avg(sal) from emp e2 where e1.job= job group by job);

62.查詢所有領導的信息:要求使用exists關鍵字
select * from emp e1 where EXISTS
(select * from emp e2 where e2.mgr = e1.empno);

63.查詢所有員工的姓名,薪水,部門名稱
select ename,sal,dname from emp,dept where EMP.DEPTNO = DEPT.DEPTNO;

64.查詢所有員工的姓名,薪水,部門名稱,薪水等級
select ename,sal,dname,grade from emp,dept,SALGRADE
where EMP.DEPTNO = DEPT.DEPTNO and SAL BETWEEN LOSAL AND HISAL;

65.查詢員工姓名及領導者姓名
select a.ename AS 員工姓名 ,b.ename AS 領導姓名
from emp a LEFT JOIN emp b on a.mgr = b.empno;

66.查詢所有員工的姓名,部門名稱
select ename, dname from emp ,dept where EMP.deptno = DEPT.deptno;

練習題:

1.查詢員工表中工資大於1600的員工的姓名和工資
select ename,sal from emp where sal > 1600;

2.查詢員工表中員工號是17的員工的姓名和部門編號
select ename,deptno from emp where empno = 17;

3.選擇員工表中工資不在4000到5000內的員工的姓名和工資
select ename,sal from emp where sal not BETWEEN 4000 and 5000;

4.選擇員工表中在20和30部門工作的員工的姓名和部門號
select ename,deptno from emp where deptno in (20,30);

5.選擇員工表中沒有管理者的員工姓名及職位,按職位排序
select ename,job from emp where mgr is null ORDER BY job asc;

6.選擇員工表中有獎金的員工姓名,工資和獎金,按工資倒序排列
select ename,sal,comm from emp where comm is not null ORDER BY sal asc;

7.選擇員工表中員工姓名的第三個字母是A的員工姓名
select ename from emp where ename like ‘__A%’;

8.列出部門表中的部門名稱和所在城市
select dname,loc from dept ;

9.顯示員工表中的不重複的崗位job
select DISTINCT job from emp ;

10.連接員工表中的員工姓名、職位、薪水,列之間用逗號連接,列頭顯示成out_put
select ename ||’,’|| job ||’,’|| sal AS ename_job_sal from emp ;

11.查詢員工表中員工號,姓名,工資,以及工資提高百分之20之後的結果
select empno ,ename,sal ,sal*1.2 from emp ;

12.查詢員工的姓名和工資數,條件限定爲工資數必須大於1200,並且查詢結果按入職時間進行排序。早入職的員工排在前面
select empno ,sal,HIREDATE from emp where sal > 1200 ORDER BY HIREDATE ;

13.列出除了ACCOUNTING部門之外還有什麼部門
select dname from dept where dname != ‘ACCOUNTING’;

14.把僱員按部門分組,求最高薪水,部門號 要求過濾掉名字中第二個字母是’A’的員工, 並且部門的平均薪水 > 3000,按照部門編號倒序排列
select MAX(sal),deptno from emp where ename not like ‘_A%’ GROUP BY deptno having avg(sal) > 3000 ;

15.求工作職位是’manager’的員工姓名,部門名稱和薪水等級
select ename ,dname,grade from emp,dept,salgrade
where job = ‘MANAGER’ and (sal BETWEEN LOSAL and HISAL)
and EMP.DEPTNO = DEPT.DEPTNO;

按照部門分組統計,求最高薪水,平均薪水,最低薪水,只有薪水是1200以上的員工才參與統計,並且分組結果中只包含平均薪水在1500以上的部門,並且按照平均薪水倒序排列
select max(sal),min(sal),avg(sal) from emp where sal > 1200
group by deptno having avg(sal) > 1500 order by avg(sal) DESC;
17.求薪水最高的員工姓名
select ename from emp where sal = (select max(sal) from emp);

18.查詢各部門平均薪水等級,並且按平均薪水等級的降序排列
select grade from salgrade s join
(select avg(sal) avg_sal from emp e group by deptno) temp
on TEMP.avg_sal between s.LOSAL and s.HISAL;

19.查詢所有員工姓名以S或s開頭的所有員工信息
select * from emp where ename like ‘S%’ or ename like ‘s%’;

20.查詢所有工作時間超過一年的員工編號,姓名及入職時間,要求僱用時間的格式爲’yyyy年mm月dd日’
select empno,ename,TO_CHAR(HIREDATE,’yyyy”年”MM”月”dd”日”’) from emp where
TO_CHAR(SYSDATE,’YYYY’) - TO_CHAR(hiredate,’YYYY’) > 1;

21.查詢20部門的所有員工的員工姓名,實際收入
select ename,sal+NVL(comm, 0) from emp where deptno = 20 ;

22.查詢10部門工資大於3000的員工信息,要求按員工的入職時間由前到後排序
select * from emp where deptno = 10 and sal > 3000 ORDER BY HIREDATE ;

23.查詢10部門或20部門的所有員工的姓名,並截取前三位,按員工姓名升序排列
select SUBSTR(ename, 1, 3) from emp where deptno in (20,10) ORDER BY ename ;

24、查詢所有員工的姓名,要求所有員工的姓名顯示成小寫,僱用日期顯示爲”yyyy-mm-dd”這種格式,薪水轉換成’99,999.999′這種格式selectlower(ename),TOCHAR(HIREDATE,′YYYY−MM−DD′),TOCHAR(sal,′99,999.999’) from emp ;

25、查詢所有員工的姓名,所在部門名稱,薪水,薪水等級、直接領導的姓名 (有問題,不顯示最高領導)
select e1.ename,DEPT.dname,e1.sal,grade,e2.ename AS leader from emp e1,emp e2,dept,salgrade
where nvl(e1.MGR,0) = e2.empno and (e1.sal between SALGRADE.LOSAL and SALGRADE.HISAL)
and e1.deptno = dept.deptno;

26、查詢部門名稱是’ACCOUNTING’的員工姓名及薪水等級
select ename,grade from emp ,salgrade ,dept where
dname=’ACCOUNTING’ and sal between LOSAL and HISAL
and EMP.deptno = DEPT.deptno ;

27、不能使用組函數,查詢薪水的最高值
select sal from emp where sal >= all (select sal from emp);

28、統計平均薪水最高的部門名稱

29、查詢平均薪水等級最低的部門名稱

選做

1、查詢平均薪水最低的部門名稱,要求:只有領導才參加統計
2、查詢比普通員工的最高薪水還要高的領導者姓名
3、找出薪水最高的五個人
4、查詢第2到第7名的員工,按薪水降序排列
5、查詢最後入職的5名員工

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章