zoukankan      html  css  js  c++  java
  • 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);

    时间久远 就不提供描述信息了 仅供参考 原作者的连接在相关文章可以获取到

  • 相关阅读:
    Spring 理解和开始
    SpringBoot之日期时间格式化
    Java 中 DO、PO、BO、DTO、VO 等各对象概念说明
    RocketMQ之Broker
    RocketMQ之NameSever
    RocketMQ之Consumer
    RocketMQ之Producer
    RocketMQ之简单使用
    RocketMQ单机版安装
    RocketMQ介绍
  • 原文地址:https://www.cnblogs.com/qingkongwanli/p/7383712.html
Copyright © 2011-2022 走看看