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);

时间久远 就不提供描述信息了 仅供参考 原做者的链接在相关文章能够获取到