Oracle SQL:经典查询练手第三篇
有难度 但是不要放弃 使用hr账户
表结构如下:hr.employees
hr.departments
hr.regions
表中数据太多 就不贴了
用SQL完成以下问题列表:
1. 让SELECT TO_CHAR(SALARY,'L99,999.99') FROM HR.EMPLOYEES WHERE ROWNUM < 5 输出结果的货币单位是¥和$。
2. 列出前五位每个员工的名字,工资、涨薪后的的工资(涨幅为8%),以“元”为单位进行四舍五入。
3. 找出谁是最高领导,将名字按大写形式显示。
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);
时间久远 就不提供描述信息了 仅供参考 原作者的连接在相关文章可以获取到