【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

运行结果:

相关推荐
一叶屋檐7 分钟前
Neo4j 图书馆借阅系统知识图谱设计
服务器·数据库·cypher
好吃的肘子1 小时前
MongoDB 应用实战
大数据·开发语言·数据库·算法·mongodb·全文检索
weixin_472339461 小时前
MySQL MCP 使用案例
数据库·mysql
lqlj22332 小时前
Spark SQL 读取 CSV 文件,并将数据写入 MySQL 数据库
数据库·sql·spark
遗憾皆是温柔3 小时前
MyBatis—动态 SQL
java·数据库·ide·sql·mybatis
未来之窗软件服务3 小时前
Cacti 未经身份验证SQL注入漏洞
android·数据库·sql·服务器安全
fengye2071613 小时前
在MYSQL中导入cookbook.sql文件
数据库·mysql·adb
拓端研究室TRL4 小时前
Python与MySQL网站排名数据分析及多层感知机MLP、机器学习优化策略和地理可视化应用|附AI智能体数据代码
人工智能·python·mysql·机器学习·数据分析
Ailovelearning4 小时前
neo4j框架:ubuntu系统中neo4j安装与使用教程
数据库·neo4j
_星辰大海乀5 小时前
表的设计、聚合函数
java·数据结构·数据库·sql·mysql·数据库开发