【MySQL】(基础篇十二) —— 子查询

分组数据

本文介绍什么是子查询以及如何使用它们。

SQL允许我们创建子查询(subquery),即嵌套在其他查询中的查询。这样可以实现更复杂的查询,理解这个概念的最好方法是考察几个例子。

利用子查询进行过滤

需求:查询employees表中department_id为IT的所有员工信息

要实现这个查询,首先要在departments表中查找到it对应的department_id,然后再根据department_id在employees表中查询对应的员工信息。要在一个语句中完成两次查询,使用子查询可以很好地完成任务。

sql 复制代码
SELECT  * 
FROM `employees`
WHERE department_id IN (
      SELECT department_id
      FROM `departments`
      WHERE department_name = 'it'
);

在SELECT语句中,子查询总是从内向外处理。在处理上面的SELECT语句时,MySQL实际上执行了两个操作。先执行内部的子查询,然后将结果返回给外面的查询

在WHERE子句中使用子查询(如这里所示),应该保证SELECT语句具有与WHERE子句中相同数目的列。通常,子查询将返回单个列并且与单个列匹配,但如果需要也可以使用多个列。

作为计算字段使用子查询

需求:查询departments表中,每个部门拥有的员工数量

员工数量在employees表中使用聚集函数查询,然后作为子查询传递回给departments表中

sql 复制代码
SELECT department_id, department_name, 
     (SELECT COUNT(*)
     FROM employees
     WHERE employees.department_id = departments.department_id) as total_people 
FROM departments

运行结果:

相关推荐
我爱吃土豆14 分钟前
Agent 的记忆机制
开发语言·数据库·人工智能
AOwhisky7 分钟前
MySQL 学习笔记(第五期):用户管理与权限控制
linux·运维·数据库·笔记·学习·mysql
SPC的存折15 分钟前
MySQL完整学习手册(视频精华版)
学习·mysql·音视频
梦想的颜色21 分钟前
Redis数据类型全解析:从底层原理到生产实战
运维·数据库·redis·缓存·高并发·分布式锁·数据类型
C137的本贾尼28 分钟前
InnoDB 的物理世界:表空间、段、区与页
数据库
JdSnE27zv28 分钟前
EF Code First学习笔记:数据库创建
数据库·笔记·学习
C137的本贾尼38 分钟前
JDBC 编程:用 Java 连接 MySQL
java·开发语言·mysql
我是一颗柠檬44 分钟前
【Redis】Redis性能优化Day14(2026年)
数据库·redis·性能优化
程序员老油条1 小时前
用 AI 生成复杂 SQL:LangChain4j + 本地模型实践
数据库·人工智能·sql
IT邦德1 小时前
Oracle 26ai RAC 通过gold image RU打补丁
数据库·oracle