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

    不经一番彻骨寒,哪有梅花扑鼻香?
  • 相关阅读:
    python中的矩阵运算
    【python问题系列--4】ValueError: operands could not be broadcast together with shapes (100,3) (3,1)
    【Machine Learning in Action --4】朴素贝叶斯从个人广告中获取区域倾向
    php使用数组语法访问对象
    curl: (60) SSL certificate problem: unable to get local issuer certificate 错误
    php 回调、匿名函数和闭包
    php5.3 延迟静态绑定 static关键字
    利用redis完成自动补全搜索功能(三)
    利用redis完成自动补全搜索功能(二)
    利用redis完成自动补全搜索功能(一)
  • 原文地址:https://www.cnblogs.com/zongyao/p/13831104.html
Copyright © 2011-2022 走看看