• 09_子查询


    子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL4.1开始引入。

    SQL中子查询的使用大大增强了SELECT查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量,也可能是某个集合)进行比较。

    在这里插入图片描述

    1.需求分析与问题解决

    1.1实际问题

    在这里插入图片描述
    解决方式:

    #需求:i谁的工资比Abel的高?
    #方式1:
    SELECT salary
    FROM employees
    WHERE last_name = ‘Abel’;

    SELECT last_name,salary
    FROM employees
    WHERE salary > 11000;
    #方式二
    SELECT e2.last_name, e2.salary
    FROM employees e1, employees e2
    WHERE e2.salary > e1.salary #多表的连接条件
    AND e1.last_name =‘Abel’;
    #方式三:子查询
    SELECT last_name , salary
    FROM employees
    WHERE salary > (
    SELECT salary
    FROM employees
    WHERE last_name = ‘Abel’
    );
    在这里插入图片描述

    1.2子查询的基本使用

    称谓的规范:外查询(或主查询)、内查询(或子查询)

    在这里插入图片描述

    1.3子查询的分类

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    2单行子查询

    2.1单行比较操作符

    在这里插入图片描述

    2.2代码示例

    • 题目:查询工资大于149号员工工资的员工的信息
      在这里插入图片描述

    • 题目:返回job_id与141号员工相同,salary比143号员工多的员工姓名,job_id和工资
      在这里插入图片描述

    • 题目:返回公司工资最少的员工的last_name,job_id和salary
      在这里插入图片描述

    • 题目:查询与141号员工的manager_id和department_id相同的其他员工的employee_id,manager_id,department_id
      在这里插入图片描述
      在这里插入图片描述

    2.3 HAVING中的子查询

    • 首先执行子查询。
    • 向主查询中的HAVING子句返回结果。

    在这里插入图片描述

    2.4CASE中的子查询

    在这里插入图片描述

    2.5子查询中的空值问题

    在这里插入图片描述

    2.6非法使用子查询

    在这里插入图片描述

    3.多行子查询

    • 也称为集合比较子查询
    • 内查询返回多行
    • 使用多行比较操作符

    3.1多行比较操作符

    在这里插入图片描述

    3.2代码示例

    在这里插入图片描述
    在这里插入图片描述

    3.3空值问题

    在这里插入图片描述
    出现原因:子查询结果中有NULL值

    SQL避坑:当in,not in遇上null这种坑你避过吗?

    在这里插入图片描述

    修改:
    在这里插入图片描述

    4.相关子查询

    4.1相关子查询执行流程

    如果子查询的执行依赖于外部查询,通常情况下都是因为子查询中的表用到了外部的表,并进行了条件关联,因此每执行一次外部查询,子查询都要重新计算一次,这样的子查询就称之为关联子查询。

    相关子查询按照一行接一行的顺序执行,主查询的每一行都执行一次子查询。

    在这里插入图片描述

    4.2代码示例

    过滤条件中使用子查询

    在这里插入图片描述

    FROM中使用子查询

    在这里插入图片描述

    ORDER BY中使用子查询

    在这里插入图片描述
    在这里插入图片描述

    4.3 EXISTS 与NOT EXISTS关键字

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    4.4相关更新

    在这里插入图片描述

    4.4相关删除

    在这里插入图片描述
    在这里插入图片描述

    5.思考题

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    【Java 进阶篇】深入了解 Bootstrap 插件
    OCP Java17 SE Developers 复习题15(完)
    ClickHouse学习笔记之表引擎
    Xilinx 7系列FPGA配置(ug470)
    如何查询快递单号物流及时发现退回件单号
    Json:Java对象和Json文本转换工具类
    14015.xilinx-芯片手册阅读笔记
    Kafka2.4.1的环境搭建
    JAVA应用服务器如何快速定位CPU问题
    Linus shell 在一个脚本中调用另外一个脚本变量
  • 原文地址:https://blog.csdn.net/qq_48083892/article/details/127225046