oracle 65題練習題

根據Oracle數據庫scott模式下的emp表和dept表,完成下列操作

1、查詢20號部門的所有員工信息。

SELECT * FROM EMP WHERE DEPTNO=20;

2、查詢所有工種爲CLERK的員工的員工號、員工名和部門號。

 SELECT EMPNO,ENAME,DEPTNO FROM EMP WHERE JOB='CLERK';

 3、查詢獎金(COMM)高於工資(SAL)的員工信息。

 SELECT * FROM EMP WHERE COMM > SAL;

 4、查詢獎金高於工資的20%的員工信息。

SELECT * FROM EMP WHERE COMM > SAL*0.2;

5、查詢10號部門中工種爲Manager和20號部門中工種爲CLERK的員工信息。

 SELECT * FROM EMP WHERE (JOB=MANAGER AND DEPTNO=10) OR (JOB = CLERK AND DEPTNO=20);

 6、查詢所有工種不是ManagerCLERK,且工資大於或等於2000的員工的詳細信息。

SELECT * FROM EMP WHERE (JOB!=MANAGER OR JOB=CLERK) AND SAL>=2000;

 

 7、查詢有獎金的員工的不同工種。

SELECT JOB FROM EMP WHERE COMM>0 GROUP BY JOB;

 8、查詢所有員工工資與獎金的和。

SELECT SUM(SAL)+SUM(COMM) FROM EMP;

 9、查詢沒有獎金或獎金低於100的員工信息。

 SELECT * FROM EMP WHERE NVL(COMM,0) <=100;

 10、查詢各月倒數第二天入職的員工信息。

SELECT * FROM EMP WHERE LAST_DAY(HIREDATE) - HIREDATE = 1;

11、查詢工齡大於或等於10年的員工信息。

SELECT * FROM EMP WHERE MONTHS_BETWEEN(SYSDATE, HIREDATE)/12 >= 10;

12、查詢員工信息,要求以首字母大寫的方式顯示所有員工的姓名。

SELECT INITCAP(ENAME) FROM EMPLOYEES;

13、查詢員工名正好爲6個字符的員工的信息。

SELECT * FROM EMP WHERE LENGTH(ENAME) = 6;

14、查詢員工名字中不包含字母S的員工。

SELECT * FROM EMP WHERE ENAME NOT LIKE '%S%';

15、查詢員工姓名的第二個字母爲M的員工信息。

SELECT * FROM EMP WHERE ENAME LIKE '__M%';

16、查詢所有員工姓名的前三個字符

SELECT SUBSTR(ENAME,1,3) FROM EMP ;

17、查詢所有員工的姓名,如果包含字母s,則用S代替。

SELECT REPLACE(ENAME,'s','S') FROM EMP;

18、查詢員工的姓名個和入職日期,並按入職日期從先到後進行排序。

SELECT ENAME, HIREDATE FROM EMP ORDER BY HIREDATE ASC;

19、顯示所有員工的姓名、工種、工資和獎金,按工種降序排序,若工種相同則按工資

升序排序。

20、顯示所有員工的姓名、入職的年份和月份,按入職日期所在的月份排序,若月份相同

則按入職的年份排序。

 SELECT ENAME,TO_CHAR(HIREDATE,'yyyy') YEAR, TO_CHAR(HIREDATE,'mm') MONTH FROM EMP ORDER BY

MONTH,YEAR;

21、查詢在2月份入職的員工信息

SELECT * FROM EMP WHERE TO_CHAR(HIREDATE, 'mm')=2;

22、查詢所有員工入職以來的工作年限,用******日的形式表示。

SELECT ENAME, (TRUNC((SYSDATE-HIREDATE)/365)||'年'||TRUNC(MOD((SYSDATEHIREDATE),

365)/30)||'月'||TRUNC(MOD(MOD((SYSDATE-HIREDATE),365),30))||'日') 入職年月日 FROM

EMP;

 23、查詢至少有一個員工的部門信息。

 SELECT * FROM DEPT WHERE DEPTNO IN (SELECT DEPTNO FROM EMP);

 24、查詢工資比SMITH員工工資高的所有員工信息。

 SELECT * FROM EMP WHERE SAL > (SELECT SAL FROM EMP WHERE ENAME = 'SMITH');

 25、查詢所有員工的姓名及其直接上級的姓名。

 SELECT A.ENAME,B.ENAME AS MGR FROM EMP A,EMP B WHERE A.MGR = B.EMPNO;

 26、查詢入職日期早於其直接領導的所有員工的信息。

 SELECT A.* FROM EMP A,EMP B WHERE A.MGR=B.EMPNO AND A.HIREDATE <

B.HIREDATE;

27、查詢所有部門及其員工的信息,包括那些沒有員工的部門。

SELECT DEPT.*,EMP.* FROM DEPT,EMP WHERE EMP.DEPTNO(+)=DEPT.DEPTNO;

28、查詢所有員工及其部門信息,包括那些還不屬於任何部門的員工。

SELECT EMP.*,DEPT.* FROM DEPT,EMP WHERE EMP.DEPTNO=DEPT.DEPTNO(+);

29、查詢所有工種爲CLERK的員工的姓名及其部門名稱。

SELECT EMP.ENAME,DEPT.DNAME FROM EMP,DEPT WHERE JOB='CLERK' AND EMP.DEPTNO =

T.DEPTNO;

30、查詢最低工資大於2500的各種工作。

SELECT JOB,MIN(SAL) FROM EMP GROUP BY JOB HAVING MIN(SAL)>2500;

31、查詢平均工資低於2000的部門及其員工信息。

SELECT A.*,B.* FROM EMP A,DEPT B WHERE A.DEPTNO IN (

SELECT DEPTNO FROM EMP GROUP BY DEPTNO HAVING AVG(SAL) < 2000) AND A.DEPTNO =

B.DEPTNO;

 32、查詢在SALES部門工作的員工的姓名信息。

 SELECT ENAME FROM EMP WHERE EMP.DEPTNO=(SELECT DEPTNO FROM DEPT WHERE

DNAME='SALES');

 33、查詢工資高於公司平均工資的所有員工信息。

 SELECT * FROM EMP WHERE SAL>(SELECT AVG(SAL) FROM EMP);

 34、查詢與SMITH員工從事相同工作的所有員工信息。

 SELECT * FROM EMP WHERE JOB=(SELECT JOB FROM EMP WHERE ENAME='SMITH');

 35、列出工資等於30號部門中某個員工工資的所有員工的姓名和工資。

 SELECT ENAME,SAL FROM EMP WHERE SAL IN (SELECT SAL FROM EMP WHERE DEPTNO=30)

AND DEPTNO!=30;

36、查詢工資高於30號部門中工作的所有員工的工資的員工姓名和工資。

SELECT ENAME,SAL FROM EMP WHERE SAL > (SELECT MAX(SAL) FROM EMP WHERE

DEPTNO=30);

37、查詢每個部門中的員工數量、平均工資和平均工作年限。

SELECT COUNT(*),AVG(SAL),AVG(SYSDATE-HIREDATE) FROM EMP GROUP BY DEPTNO;

38、查詢從事同一種工作但不屬於同一部門的員工信息。

SQL> SELECT DISTINCT A.* FROM EMP A,EMP B WHERE A.JOB=B.JOB AND A.DEPTNO!=B.DEPTNO ORDER BY A.JOB;

39、查詢各個部門的詳細信息以及部門人數、部門平均工資。

SELECT DEPT.*,PEOPLE,AVERAGESAL FROM DEPT,(SELECT COUNT(*) PEOPLE,AVG(SAL) AVERAGESAL,DEPTNO FROM EMP GROUP BY DEPTNO) B WHERE DEPT.DEPTNO=B.DEPTNO;

40、查詢各種工作的最低工資。

SELECT JOB,MIN(SAL) FROM EMP GROUP BY JOB;

41、查詢各個部門中不同工種的最高工資。

SELECT DEPTNO,JOB,MAX(SAL) FROM EMP GROUP BY DEPTNO,JOB ORDER BY DEPTNO,JOB;

42、查詢10號部門員工及其領導的信息。

SELECCT A.*,B.* FROM EMP A,EMP B WHERE A.MAR=B.EMPNO AND A.DEPTNO=10;

43、查詢各個部門的人數及其平均工資。

SELECT DEPTNO,COUNT(*),AVG(SAL) FROM EMP GROUP BY DEPTNO ORDER BY DEPTNO;

44、查詢工資爲某個部門平均工資的員工信息。

SELECT * FROM EMP WHERE SAL = ANY(SELECT COUNT(*) FROM EMP GROUP BY DEPTNO);

45、查詢工資高於本部門平均工資的員工的信息。

SELECT EMP.* FROM EMP,(SELECT DEPTNO,AVG(SAL) AVERAGE FROM EMP GROUP BY DEPTNO) B WHERE EMP.DEPTNO=B.DEPTNO AND EMP.SAL>B.AVERAGE;

46、查詢工資高於本部門平均工資的員工的信息及其部門的平均工資。

 SELECT EMP.*,AVERAGE FROM EMP,(SELECT DEPTNO,AVG(SAL) AVERAGE FROM EMP GROUP BY DEPTNO) B WHERE EMP.DEPTNO=B.DEPTNO AND EMP.SAL>B.AVERAGE;

47、查詢工資高於20號部門某個員工工資的員工信息。

SELECT EMP.* FROM EMP WHERE EMP.SAL>ANY(SELECT SAL FROM EMP WHERE DEPTNO=20);

48、統計各個工種的員工人數與平均工資。

SELECT JOB,COUNT(*),AVG(SAL) FROM EMP GROUP BY JOB;

49、統計每個部門中各工種的人數與平均工資。

SELECT DEPTNO,COUNT(*) PEOPLE,JOB,AVG(SAL) FROM EMP GROUP BY DEPTNO,JOB ORDER BY DEPTNO;

50、查詢工資、獎金與10號部門某員工工資、獎金都相同的員工信息。

SELECT * FROM EMP WHERE (SAL,NVL(COMM,0)) IN (SELECT SAL,NVL(COMM,0) FROM EMP WHERE DEPTNO=10);

 51、查詢部門人數大於5的部門的員工信息。

 SELECT * FROM EMP WHERE DEPTNO IN (SELECT DEPTNO FROM EMP GROUP BY DEPTNO HAVING COUNT(*) > 5);

 52、查詢所有員工工資都大於2000的部門的信息。

 SELECT DEPT.* FROM DEPT WHERE DEPT.DEPTNO IN (SELECT DEPTNO FROM EMP GROUP BY DEPTNO HAVING MIN(SAL)>2000);

 53、查詢所有員工工資都大於2000的部門的信息及其員工信息。

 SELECT DEPT.*,EMP.* FROM DEPT,EMP WHERE DEPT.DEPTNO IN (SELECT DEPTNO FROM EMP GROUP BY DEPTNO HAVING MIN(SAL)>2000) AND DEPT.DEPTNO=EMP.DEPTNO;

 54、查詢所有員工工資都在20003000之間的部門的信息。

SELECT DEPT.* FROM DEPT WHERE DEPT.DEPTNO IN (SELECT DEPTNO FROM EMP GROUP BY DEPTNO HAVING MIN(SAL)>2000 AND MAX(SAL)<3000);

 

 55、查詢所有工資在20003000之間的員工所在部門的員工的信息。

SELECT DEPT.*,EMP.* FROM DEPT,EMP WHERE DEPT.DEPTNO IN (SELECT DEPTNO FROM EMP GROUP BY DEPTNO HAVING MIN(SAL)>2000 AND MAX(SAL)<3000) AND DEPT.DEPTNO=EMP.DEPTNO;

 56、查詢每個員工的領導所在部門的信息。

SELECT A.ENAME,B.ENAME MANAGER,DEPT.* FROM DEPT,EMP A,EMP B WHERE A.MGR=B.EMPNO AND B.DEPTNO=DEPT.DEPTNO;

57、查詢人數最多的部門信息。

 SELECT * FROM DEPT WHERE DEPTNO IN (SELECT DEPTNO FROM EMP GROUP BY DEPTNO HAVING COUNT(*) = (SELECT MAX(COUNT(*)) FROM EMP GROUP BY DEPTNO));

58、查詢30號部門中工資排序前3名的員工的信息。

SELECT * FROM (SELECT * FROM EMP WHERE DEPTNO=30 ORDER BY SAL DESC) WHERE ROWNUM <=3;

59、查詢所有員工中工資排序在510名之間的員工的信息。

SELECT * FROM (SELECT EMP.*,ROWNUM RN FROM EMP ORDER BY SAL DESC) WHERE RN>=5 AND RN <=10;

60、查詢SMITH員工及其所有直接、間接下屬員工的信息。

SELECT * FROM EMP START WITH MGR=(SELECT MGR FROM EMP WHERE ENAME='SMITH') CONNECT BY PRIOR EMPNO=MGR;

61、查詢SCOTT員工及其直接、間接上級員工的信息。

SELECT * FROM EMP START WITH EMPNO=(SELECT MGR FROM EMP WHERE ENAME='SCOTT') CONNECT BY PRIOR MGR=EMPNO;

62、以樹狀結構查詢所有員工與領導之間的層次關係。

SELECT * FROM EMP START WITH MGR=(SELECT MGR FROM EMP WHERE ENAME='KING') CONNECT BY PRIOR EMPNO=MGR;

63、向emp中插入一條記錄,員工號爲1357,員工名爲Oracle,工資爲2050,部門號爲20,入職日期爲2002510日。

INSERT INTO EMP(EMPNO,ENAME,SAL,DEPTNO,HIREDATE) VALUES(1357,'Oracle',2050,20,TO_DATE('2002-5-10','YYYY-MM-DD'));

64、向emp中插入一條記錄,員工號爲8000,員工名爲FAN,其他信息與SMITH員工的信息

相同。

INSERT INTO EMP SELECT 8000,'FAN',JOB,MGR,HIREDATE,SAL,COMM,DEPTNO FROM EMP WHERE ENAME='SMITH';

65、將各個部門員工的工資修改爲該員工所在部門平均工資加1000

UPDATE EMP A SET SAL=1000+(SELECT AVG(SAL) FROM EMP B GROUP BY DEPTNO HAVING B.DEPTNO=A.DEPTNO);

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