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.思考题

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值