Oracle SQL:經典查詢練手第三篇

有難度 可是不要放棄 使用hr帳戶spa

表結構以下:hr.employeescode

hr.departmentsblog

hr.regionsit

表中數據太多 就不貼了io

用SQL完成如下問題列表:ast

1. 讓SELECT TO_CHAR(SALARY,'L99,999.99') FROM HR.EMPLOYEES WHERE  ROWNUM < 5 輸出結果的貨幣單位是¥和$。class

2. 列出前五位每一個員工的名字,工資、漲薪後的的工資(漲幅爲8%),以「元」爲單位進行四捨五入。im

3. 找出誰是最高領導,將名字按大寫形式顯示。d3

4. 找出First_Name 爲David,Last_Name爲Austin 的直接領導名字。數據

5. First_Name 爲Alexander,Last_Name爲Hunold領導誰。(誰向David 報告)。

6. 哪些員工的工資高於他直接上司的工資,列出員工的名字和工資,上司的名字和工資。

7. 哪些員工和Chen(LAST_NAME)同部門。

8. 哪些員工跟De Haan(LAST_NAME)作同樣職位。

9. 哪些員工跟Hall(LAST_NAME)不在同一個部門。

10. 哪些員工跟William(FIRST_NAME)、Smith(LAST_NAME)作不同的職位。

11. 顯示有提成的員工的信息:名字、提成、所在部門名稱、所在地區的名稱。

12. 顯示Executive部門有哪些職位。

13. 整個公司中,最高工資和最低工資相差多少。

14. 提成大於0 的人數。

15. 顯示整個公司的最高工資、最低工資、工資總和、平均工資保留到整數位。

16. 整個公司有多少個領導。

17. 列出在同一部門入職日期晚但工資高於其餘同事的員工:名字、工資、入職日期。

答案以下:

 

 1 --1. 讓SELECT TO_CHAR(SALARY,'L99,999.99') FROM HR.EMPLOYEES WHERE  ROWNUM < 5 輸出結果的貨幣單位是¥和$。
 2 SELECT TO_CHAR(SALARY,'L99,999.99') FROM HR.EMPLOYEES WHERE  ROWNUM < 5;
 3 SELECT TO_CHAR(SALARY,'$99,999.99') FROM HR.EMPLOYEES WHERE  ROWNUM < 5;
 4 
 5 --2. 列出前五位每一個員工的名字,工資、漲薪後的的工資(漲幅爲8%),以「元」爲單位進行四捨五入。
 6 SELECT * FROM EMPLOYEES e WHERE ROWNUM<5;
 7 SELECT e.FIRST_NAME,e.LAST_NAME,e.SALARY,ROUND(e.SALARY*1.08) FROM EMPLOYEES e WHERE ROWNUM<=5 ORDER BY e.SALARY DESC;
 8 
 9 --3. 找出誰是最高領導,將名字按大寫形式顯示。
10 SELECT * FROM EMPLOYEES e WHERE e.MANAGER_ID IS NULL;
11 SELECT upper(e.FIRST_NAME||' '||e.LAST_NAME) FROM EMPLOYEES e WHERE e.MANAGER_ID IS NULL;
12 --4. 找出First_Name 爲David,Last_Name爲Austin 的直接領導名字。
13 --
14 SELECT * FROM EMPLOYEES e WHERE e.FIRST_NAME='David' AND e.LAST_NAME='Austin';
15 
16 SELECT EMPLOYEE_ID FROM EMPLOYEES WHERE EMPLOYEE_ID=(SELECT e.MANAGER_ID FROM EMPLOYEES e WHERE e.FIRST_NAME='David' AND e.LAST_NAME='Austin');
17 
18 --5. First_Name 爲Alexander,Last_Name爲Hunold領導誰。(誰向David 報告)。
19 --
20 SELECT * FROM EMPLOYEES e WHERE e.MANAGER_ID = (SELECT EMPLOYEE_ID FROM EMPLOYEES WHERE EMPLOYEE_ID=(SELECT e.MANAGER_ID FROM EMPLOYEES e WHERE e.FIRST_NAME='David' AND e.LAST_NAME='Austin'));
21 
22 --6. 哪些員工的工資高於他直接上司的工資,列出員工的名字和工資,上司的名字和工資。
23 --
24 SELECT e.FIRST_NAME,e.SALARY,(SELECT ee.FIRST_NAME  FROM EMPLOYEES ee WHERE ee.EMPLOYEE_ID=e.MANAGER_ID AND nvl(e.SALARY,0)>nvl(ee.SALARY,0) ) FROM EMPLOYEES e;
25 
26 SELECT e.FIRST_NAME,e.SALARY,ee.FIRST_NAME,ee.SALARY FROM EMPLOYEES e,EMPLOYEES ee WHERE e.MANAGER_ID=e.EMPLOYEE_ID AND e.SALARY>ee.SALARY;
27 
28 
29 --7. 哪些員工和Chen(LAST_NAME)同部門。
30 --
31 SELECT e.DEPARTMENT_ID FROM EMPLOYEES e WHERE e.LAST_NAME='Chen';
32 SELECT * FROM EMPLOYEES ee WHERE ee.DEPARTMENT_ID IN (SELECT e.DEPARTMENT_ID FROM EMPLOYEES e WHERE e.LAST_NAME='Chen');
33 
34 --8. 哪些員工跟De Haan(LAST_NAME)作同樣職位。
35 --
36 SELECT * FROM EMPLOYEES ee WHERE ee.JOB_ID IN (SELECT e.JOB_ID FROM EMPLOYEES e WHERE e.LAST_NAME='De Haan');
37 
38 --9. 哪些員工跟Hall(LAST_NAME)不在同一個部門。
39 --
40 SELECT * FROM EMPLOYEES ee WHERE ee.DEPARTMENT_ID NOT IN (SELECT e.DEPARTMENT_ID FROM EMPLOYEES e WHERE e.LAST_NAME='Hall');
41 
42 --10. 哪些員工跟William(FIRST_NAME)、Smith(LAST_NAME)作不同的職位。
43 --
44 SELECT * FROM EMPLOYEES ee WHERE ee.JOB_ID NOT IN (SELECT e.JOB_ID FROM EMPLOYEES e WHERE e.LAST_NAME='Smith' AND e.FIRST_NAME='William');
45 
46 --11. 顯示有提成的員工的信息:名字、提成、所在部門名稱、所在地區的名稱。
47 --
48 SELECT e.FIRST_NAME,e.COMMISSION_PCT,d.DEPARTMENT_NAME,l.CITY,l.STATE_PROVINCE FROM EMPLOYEES e,DEPARTMENTS d,LOCATIONS l WHERE e.COMMISSION_PCT IS NOT NULL AND e.DEPARTMENT_ID=d.DEPARTMENT_ID and d.LOCATION_ID=l.LOCATION_ID;
49 
50 --12. 顯示Executive部門有哪些職位。
51 --
52 SELECT d.DEPARTMENT_ID FROM DEPARTMENTS d WHERE d.DEPARTMENT_NAME='Executive';
53 
54 SELECT DISTINCT e.JOB_ID FROM EMPLOYEES e WHERE e.DEPARTMENT_ID IN (SELECT d.DEPARTMENT_ID FROM DEPARTMENTS d WHERE d.DEPARTMENT_NAME='Executive');
55 
56 --13. 整個公司中,最高工資和最低工資相差多少。
57 --
58 SELECT MAX(e.SALARY)-MIN(e.SALARY),MAX(e.SALARY),MIN(e.SALARY) FROM EMPLOYEES e;
59 
60 --14. 提成大於0 的人數。
61 --
62 SELECT COUNT(1) FROM EMPLOYEES e WHERE e.COMMISSION_PCT >0;
63 --15. 顯示整個公司的最高工資、最低工資、工資總和、平均工資保留到整數位。
64 --
65 SELECT MAX(e.SALARY),MIN(e.SALARY),SUM(e.SALARY), ROUND(AVG(e.SALARY)) FROM EMPLOYEES e;
66 --16. 整個公司有多少個領導。
67 --
68 SELECT count(1) FROM DEPARTMENTS d WHERE d.MANAGER_ID is not null;
69 --17. 列出在同一部門入職日期晚但工資高於其餘同事的員工:名字、工資、入職日期。
70 SELECT e.FIRST_NAME FROM EMPLOYEES e WHERE e.HIRE_DATE>(SELECT ee.HIRE_DATE FROM EMPLOYEES ee where ee.DEPARTMENT_ID=e.DEPARTMENT_ID);

時間久遠 就不提供描述信息了 僅供參考 原做者的鏈接在相關文章能夠獲取到

相關文章
相關標籤/搜索