【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

运行结果:

相关推荐
AI人工智能+电脑小能手1 分钟前
【大白话说Java面试题 第94题】【Mysql篇】第24题:什么是单路排序?什么是双路排序??
java·开发语言·数据库·mysql·面试·排序算法
我是一颗柠檬2 分钟前
【Java项目技术亮点】多级缓存一致性方案:Canal+MQ实现数据库与缓存的最终一致
java·数据库·spring·缓存·kafka·rocketmq
WarPigs2 分钟前
C# EntityFramework笔记
数据库·c#
csdn_aspnet2 分钟前
mysql 查询树形,id与pid关联
数据库·mysql·tree·树形
Database_Cool_4 分钟前
用户行为分析需求,实时计算层应该怎么选型?阿里云 AnalyticDB MySQL 推荐方案
mysql·阿里云·云原生
郝学胜-神的一滴6 分钟前
系统设计 014:缓存深度实战:如何用 Cache 优雅优化数据库读写?
java·数据库·python·缓存·oracle·php·软件构建
点灯小铭9 分钟前
基于单片机的智能一体化自动咖啡机设计
数据库·单片机·毕业设计·课程设计·期末大作业
JdSnE27zv14 分钟前
数据库表字段命名规范
数据库·oracle
隔窗听雨眠21 分钟前
ORM框架选型指南:MyBatis与Hibernate的全面对比
java·开发语言·数据库
tedcloud12321 分钟前
Dolt部署教程:打造可追踪数据变更的数据库环境
服务器·数据库·人工智能·学习·自动化·powerpoint