SQL基础⑦ | 子查询

0 序言

本文将系统讲解SQL中子查询的概念分类执行逻辑实际用法,包括单行子查询多行子查询相关子查询的操作符与示例,以及子查询的注意事项。

通过学习,你将掌握如何使用子查询解决复杂查询问题,理解不同类型子查询的适用场景,提升SQL查询的灵活性与效率。

1 子查询概述

1.1 什么是子查询

什么是子查询呢?
子查询是嵌套在另一个查询语句内部的查询。

从MySQL 4.1开始引入,它能增强SELECT查询能力,支持从结果集获取数据,或用一个查询结果作为另一个查询的条件,

打个例子,如“谁的工资比TOM高”可通过子查询先获取Abel的工资,再筛选更高工资的员工。

这样子查询的效率就提高了。

1.2 基本语法

SELECT select_list
FROM table
WHERE expr operator (
  SELECT select_list
  FROM table
);
  • 子查询需包含在括号内,通常放在比较条件右侧。
  • 子查询(内查询)先执行,结果供主查询(外查询)使用。

1.3 分类

1.3.1 按结果行数分类

  • 单行子查询:内查询返回一条记录,对应单行比较操作符(=、>、<等)。
  • 多行子查询:内查询返回多条记录,对应多行比较操作符(IN、ANY、ALL等)。

1.3.2 按执行次数分类

  • 不相关子查询:内查询仅执行一次,结果作为主查询条件。比方说先查A的工资,再用该值筛选其他员工)。
  • 相关子查询:内查询执行次数依赖外部查询,每次外部查询行变化时,子查询需重新计算。比如查询员工工资高于本部门平均工资)。

2 单行子查询

2.1 单行比较操作符

操作符 含义
= 等于
> 大于
>= 大于等于
< 小于
<= 小于等于
<> 不等于

2.2 代码示例

2.2.1 子查询基础

查询工资大于149号员工工资的员工姓名

SELECT last_name 
FROM employees 
WHERE salary > (
  SELECT salary 
  FROM employees 
  WHERE employee_id = 149
);

说明:子查询先获取149号员工的工资,主查询用该值筛选工资更高的员工。

在这里插入图片描述

2.2.2 多条件子查询

返回job_id与141号员工相同、工资比142号员工高的员工信息

SELECT last_name, job_id, salary 
FROM employees 
WHERE job_id = (
  SELECT job_id 
  FROM employees 
  WHERE employee_id = 14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值