【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

运行结果:

相关推荐
笔头子19 分钟前
【Caché】数据库基础操作
数据库
上火的金鱼妹21 分钟前
redis集群部署与连接
数据库·redis·缓存
程序员-Benothing35 分钟前
MySQL 二级索引有 MVCC 快照吗?
数据库·mysql
xiaoxiangsiyan1 小时前
网络智能化转型核心模块全解析
运维·服务器·网络·数据库·学习·架构·php
不才不才不不才1 小时前
Spring 源码系列(25): @EnableTransactionManagement 与 TransactionInterceptor
java·数据库·spring
l1t1 小时前
DeepSeek总结的DuckDB访谈:DuckDB的崛起、扩展与AWS收购
数据库·云计算·aws·duckdb
隔窗听雨眠1 小时前
CI/CD测试数据清理完全指南:从污染根因到三层清理覆盖的完整方案
java·数据库·ci/cd
无定义_1 小时前
Bellman-Ford——贝尔曼福特算法
数据库·算法
盟接之桥1 小时前
半导体供应链破局:EDI如何成为中国制造的数字通行证
大数据·运维·服务器·网络·数据库·人工智能·制造
其实防守也摸鱼2 小时前
ZLibrary 类项目合规避坑指南:从技术实现到法律风险的全景梳理
运维·服务器·数据库·安全·自动化·github·copilot