分组数据
本文介绍什么是子查询以及如何使用它们。
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
运行结果: