• #第九章 子查询课后习题


    #第九章 子查询课后习题

    #1.查询和Zlotkey相同部门的员工姓名和工资
    SELECT last_name,salary
    FROM employees
    WHERE department_id=(
    SELECT department_id
    FROM employees
    WHERE last_name=‘Zlotkey’
    );

    #2.查询工资比公司平均工资高的员工的员工号,姓名和工资。
    SELECT employee_id,last_name,salary
    FROM employees
    WHERE salary>(
    SELECT AVG(salary)
    FROM employees
    );

    #3.选择工资大于所有JOB_ID = 'SA_MAN’的员工的工资的员工的last_name, job_id, salary
    SELECT last_name,job_id,salary
    FROM employees
    WHERE salary>ALL(
    SELECT salary
    FROM employees
    WHERE job_id=‘SA_MAN’
    );

    #4.查询和姓名中包含字母u的员工在相同部门的员工的员工号和姓名
    SELECT employee_id,last_name
    FROM employees
    WHERE department_id IN(
    SELECT department_id
    FROM employees
    WHERE last_name LIKE ‘%u%’
    );

    #5.查询在部门的location_id为1700的部门工作的员工的员工号
    SELECT employee_id
    FROM employees JOIN departments
    ON employees.department_id=departments.department_id
    WHERE location_id=1700;

    #6.查询管理者是King的员工姓名和工资
    SELECT e1.last_name,e1.salary
    FROM employees e1 JOIN
    employees e2
    ON e1.manager_id=e2.employee_id
    AND e1.manager_id IN(
    SELECT employee_id
    FROM employees
    WHERE last_name=‘King’
    );

    #下面更好的方法
    SELECT last_name,salary
    FROM employees
    WHERE manager_id IN(
    SELECT employee_id
    FROM employees
    WHERE last_name=‘King’
    )

    #7.查询工资最低的员工信息: last_name, salary
    SELECT last_name,salary
    FROM employees
    WHERE salary=(
    SELECT MIN(salary)
    FROM employees
    );

    #8.查询平均工资最低的部门信息
    SELECT department_id,AVG(salary)
    FROM employees
    GROUP BY department_id
    HAVING AVG(salary)<=ALL(
    SELECT AVG(salary)
    FROM employees
    GROUP BY department_id
    );

    #下面是简便方法求部门最低平均工资但无法显示部门
    SELECT MIN(avg_sal)
    FROM (
    SELECT AVG(salary) avg_sal
    FROM employees
    GROUP BY department_id
    )t_dept_avgsal

    #success
    SELECT *
    FROM departments
    WHERE department_id=(
    SELECT department_id
    FROM employees
    GROUP BY department_id
    HAVING AVG(salary)=(
    SELECT MIN(avg_sal)
    FROM (
    SELECT AVG(salary)avg_sal
    FROM employees
    GROUP BY department_id
    )t_dept_avg_sal
    )
    );

    #方式二:
    SELECT *
    FROM departments
    WHERE department_id=(
    SELECT department_id
    FROM employees
    GROUP BY department_id
    HAVING AVG(salary)<=ALL(
    SELECT AVG(salary)
    FROM employees
    GROUP BY department_id
    )
    );

    #方式3:用limit
    SELECT *
    FROM departments
    WHERE department_id=(
    SELECT department_id
    FROM employees
    GROUP BY department_id
    HAVING AVG(salary)=(
    SELECT AVG(salary)avg_sal
    FROM employees
    GROUP BY department_id
    ORDER BY avg_sal ASC
    LIMIT 1
    )
    );

    #方式4:
    SELECT d.*
    FROM departments d,(
    SELECT department_id,AVG(salary)avg_sal
    FROM employees
    GROUP BY department_id
    ORDER BY avg_sal ASC
    LIMIT 0,1
    )t_dept_avg_sal
    WHERE d.department_id=t_dept_avg_sal.department_id;

    #9.查询平均工资最低的部门信息和该部门的平均工资(相关子查询)
    SELECT department_id,AVG(salary)
    FROM employees e1
    GROUP BY department_id
    HAVING AVG(salary)<=ALL(
    SELECT AVG(salary)
    FROM employees
    GROUP BY department_id
    );

    #10.查询平均工资最高的 job 信息
    SELECT job_id,AVG(salary)
    FROM employees
    GROUP BY job_id
    HAVING AVG(salary)>=ALL(
    SELECT AVG(salary)
    FROM employees
    GROUP BY job_id
    );

    #11.查询平均工资高于公司平均工资的部门有哪些?
    SELECT department_id,AVG(salary)
    FROM employees
    GROUP BY department_id
    HAVING AVG(salary)>(
    SELECT AVG(salary)
    FROM employees
    );

    #12.查询出公司中所有 manager 的详细信息
    SELECT e1.last_name,e1.employee_id
    FROM employees e1
    WHERE e1.employee_id IN(
    SELECT manager_id
    FROM employees
    );

    SELECT DISTINCT e1.last_name,e1.employee_id
    FROM employees e1, employees e2
    WHERE e1.employee_id=e2.manager_id;

    #13.各个部门中最高工资中最低的工资 ,所在部门的最低工资是多少?
    SELECT MIN(salary)
    FROM employees
    WHERE department_id=(
    SELECT department_id
    FROM employees
    GROUP BY department_id
    HAVING MAX(salary)=(
    SELECT MIN(max_sal)
    FROM (
    SELECT MAX(salary)max_sal
    FROM employees
    GROUP BY department_id
    )t_dept_max_sal
    )
    );

    #14.查询平均工资最高的部门的 manager 的详细信息: last_name, department_id, email, salary
    SELECT employee_id,last_name,department_id,email,salary
    FROM employees
    WHERE department_id=(
    SELECT department_id
    FROM employees
    GROUP BY department_id
    HAVING AVG(salary)>=ALL(
    SELECT AVG(salary)
    FROM employees
    GROUP BY department_id)
    );

    #只查询一条结果
    SELECT employee_id,last_name,department_id,email,salary
    FROM employees
    GROUP BY department_id
    HAVING AVG(salary)>=ALL(
    SELECT AVG(salary)
    FROM employees
    GROUP BY department_id
    );

    #工资最高的部门信息
    SELECT AVG(salary),department_id
    FROM employees
    GROUP BY department_id
    HAVING AVG(salary)>=ALL(
    SELECT AVG(salary)
    FROM employees
    GROUP BY department_id);

    #工资最低的部门信息
    SELECT AVG(salary),department_id
    FROM employees
    GROUP BY department_id
    HAVING AVG(salary)<=ALL(
    SELECT AVG(salary)
    FROM employees
    GROUP BY department_id
    );

    #15. 查询部门的部门号,其中不包括job_id是"ST_CLERK"的部门号
    SELECT department_id
    FROM departments
    WHERE department_id NOT IN(
    SELECT DISTINCT department_id
    FROM employees
    WHERE job_id=‘ST_CLEPK’
    );

    #16. 选择所有没有管理者的员工的last_name
    SELECT last_name
    FROM employees
    WHERE manager_id<=>NULL;

    #17.查询员工号、姓名、雇用时间、工资,其中员工的管理者为 ‘De Haan’
    SELECT employee_id,last_name,hire_date,salary
    FROM employees
    WHERE manager_id=(
    SELECT employee_id
    FROM employees
    WHERE last_name=‘De Haan’
    );

    #方式二
    SELECT employee_id,last_name,hire_date,salary
    FROM employees e1
    WHERE EXISTS(
    SELECT *
    FROM employees e2
    WHERE e1.manager_id=e2.employee_id
    AND e2.last_name=‘De Haan’
    );

    #18.查询各部门中工资比本部门平均工资高的员工的员工号, 姓名和工资(相关子查询)
    #让他们两个department_id相等来限制在相同的部门之中
    SELECT employee_id,last_name,salary
    FROM employees e1
    WHERE salary>(
    SELECT AVG(salary)
    FROM employees e2
    WHERE e1.department_id=e2.department_id
    );

    #19.查询每个部门下的部门人数大于 5 的部门名称(相关子查询)
    SELECT department_name
    FROM departments d
    WHERE (SELECT COUNT(*)
    FROM employees e
    WHERE d.department_id=e.department_id)>5;

    #20.查询每个国家下的部门个数大于 2 的国家编号(相关子查询)
    SELECT country_id
    FROM countries
    WHERE region_id IN(
    SELECT region_id
    FROM countries
    WHERE region_id>2
    )

    SELECT * FROM locations;

    #下面是所给答案
    SELECT country_id
    FROM locations l
    WHERE 2<(SELECT COUNT(*)
    FROM departments d
    WHERE l.location_id=d.location_id);

  • 相关阅读:
    【LCD应用编程】绘制点、线、矩形框
    netty系列之: 在netty中使用 tls 协议请求 DNS 服务器
    【MySQL数据库】基本命令操作及语句总结
    现货白银应该遵守哪些规则?
    shell脚本学习笔记
    AcWing_第 78 场周赛
    高级人工智能系列(一)——贝叶斯网络、概率推理和朴素贝叶斯网络分类器
    ELK日志分析系统的详细介绍与部署
    JVM 类加载机制
    【Oracle篇】rman时间点异机恢复:从RAC环境到单机测试环境的转移(第六篇,总共八篇)
  • 原文地址:https://blog.csdn.net/m0_46914845/article/details/126067851