• MySQl查询 --子查询


    前言:

    数据库:https://blog.csdn.net/qq_39566715/article/details/107409320

    一、含义
    嵌套在其他语句内部的select语句称为子查询或内查询,
    外面的语句可以是insert、update、delete、select等,一般select作为外面语句较多
    外面如果为select语句,则此语句称为外查询或主查询

    二、分类
    1、按出现位置
    select后面:
            仅仅支持标量子查询
    from后面:
            表子查询
    where或having后面:
            标量子查询
            列子查询
            行子查询
    exists后面:
            标量子查询
            列子查询
            行子查询
            表子查询

    2、按结果集的行列
    标量子查询(单行子查询):结果集为一行一列
    列子查询(多行子查询):结果集为多行一列
    行子查询:结果集为多行多列
    表子查询:结果集为多行多列


    三、示例
    where或having后面
    1、标量子查询
    案例:查询最低工资的员工姓名和工资
    ①最低工资
    select min(salary) from employees

    ②查询员工的姓名和工资,要求工资=①
    select last_name,salary
    from employees
    where salary=(
        select min(salary) from employees
    );

    2、列子查询
    案例:查询所有是领导的员工姓名
    ①查询所有员工的 manager_id
    select manager_id
    from employees

    ②查询姓名,employee_id属于①列表的一个
    select last_name
    from employees
    where employee_id in(
        select manager_id
        from employees
    );

    #1.    查询和Zlotkey相同部门的员工姓名和工资

    #①查询Zlotkey的部门
    SELECT department_id
    FROM employees
    WHERE last_name = 'Zlotkey'

    #②查询部门号=①的姓名和工资
    SELECT last_name,salary
    FROM employees
    WHERE department_id = (
        SELECT department_id
        FROM employees
        WHERE last_name = 'Zlotkey'

    )

    #2.查询工资比公司平均工资高的员工的员工号,姓名和工资。

    #①查询平均工资
    SELECT AVG(salary)
    FROM employees

    #②查询工资>①的员工号,姓名和工资。

    SELECT last_name,employee_id,salary
    FROM employees
    WHERE salary>(

        SELECT AVG(salary)
        FROM employees
    );

    #3.查询各部门中工资比本部门平均工资高的员工的员工号, 姓名和工资
    #①查询各部门的平均工资
    SELECT AVG(salary),department_id
    FROM employees
    GROUP BY department_id

    #②连接①结果集和employees表,进行筛选
    SELECT employee_id,last_name,salary,e.department_id
    FROM employees e
    INNER JOIN (
        SELECT AVG(salary) ag,department_id
        FROM employees
        GROUP BY department_id


    ) ag_dep
    ON e.department_id = ag_dep.department_id
    WHERE salary>ag_dep.ag ;

    #4.    查询和姓名中包含字母u的员工在相同部门的员工的员工号和姓名
    #①查询姓名中包含字母u的员工的部门

    SELECT  DISTINCT department_id
    FROM employees
    WHERE last_name LIKE '%u%'

    #②查询部门号=①中的任意一个的员工号和姓名
    SELECT last_name,employee_id
    FROM employees
    WHERE department_id IN(
        SELECT  DISTINCT department_id
        FROM employees
        WHERE last_name LIKE '%u%'
    );

    #5. 查询在部门的location_id为1700的部门工作的员工的员工号

    #①查询location_id为1700的部门

    SELECT DISTINCT department_id
    FROM departments 
    WHERE location_id  = 1700


    #②查询部门号=①中的任意一个的员工号
    SELECT employee_id
    FROM employees
    WHERE department_id =ANY(
        SELECT DISTINCT department_id
        FROM departments 
        WHERE location_id  = 1700

    );
    #6.查询管理者是King的员工姓名和工资

    #①查询姓名为king的员工编号
    SELECT employee_id
    FROM employees
    WHERE last_name  = 'K_ing'

    #②查询哪个员工的manager_id = ①
    SELECT last_name,salary
    FROM employees
    WHERE manager_id IN(
        SELECT employee_id
        FROM employees
        WHERE last_name  = 'K_ing'

    );

    #7.查询工资最高的员工的姓名,要求first_name和last_name显示为一列,列名为 姓.名
    #①查询最高工资
    SELECT MAX(salary)
    FROM employees

    #②查询工资=①的姓.名

    SELECT CONCAT(first_name,last_name) "姓.名"
    FROM employees
    WHERE salary=(
        SELECT MAX(salary)
        FROM employees

    );

    练习2:

    1. 查询工资最低的员工信息: last_name, salary

    SELECT
        e1.salary,
        e1.last_name 
    FROM
        employees e1 
    WHERE
        e1.salary =(
        SELECT
            MIN( salary ) 
        FROM
        employees e2 
        )

    2. 查询平均工资最低的部门信息

    SELECT
    	d.* 
    FROM
    	departments d 
    WHERE
    	department_id =(
    	SELECT
    		department_id 
    	FROM
    		employees 
    	GROUP BY
    		department_id 
    	HAVING
    	AVG( salary )= ( SELECT MIN( ag ) FROM 
    ( SELECT AVG( salary ) ag, department_id FROM employees GROUP BY department_id ) e2 ));

    3. 查询平均工资最低的部门信息和该部门的平均工资

    4. 查询平均工资最高的 job 信息

    5. 查询平均工资高于公司平均工资的部门有哪些?

    6. 查询出公司中所有 manager 的详细信息.

    7. 各个部门中 最高工资中最低的那个部门的 最低工资是多少

    8. 查询平均工资最高的部门的 manager 的详细信息: last_name, department_id, email, salary

    不经一番彻骨寒,哪有梅花扑鼻香?
  • 相关阅读:
    Android为TV端助力 转载:Android绘图Canvas十八般武器之Shader详解及实战篇(下)
    Android为TV端助力 android 在5.0以后不允许使用隐式Intent方式来启动Service
    Android为TV端助力 清除本应用里的各种数据的方法
    Android为TV端助力 计算每个目录剩余空间丶总空间以及SD卡剩余空间
    Android为TV端助力 布局、绘制、内存泄露、响应速度、listview和bitmap、线程优化以及一些优化的建议!
    Android为TV端助力 帧动画
    Android为TV端助力 自定义动画
    Android为TV端助力 自定义通知栏
    Android为TV端助力 转载:android自定义view实战(温度控制表)!
    Android为TV端助力 Canvas 和 Paint用法
  • 原文地址:https://www.cnblogs.com/zongyao/p/13831104.html
Copyright © 2020-2023  润新知