mysql SQL子查询(史上最详细)
子查询是嵌套在另一个 SELECT, INSERT, UPDATE, 或 DELETE查询的 SQL 查询。子查询可以在 WHERE 子句中、FROM 子句或 SELECT 列表中出现。
- 子查询在 WHERE 子句中
例如,我们有两个表,员工表(employees)和部门表(departments)。我们需要找出在销售部(Sales)工作的所有员工。
SELECT * FROM employees
WHERE department_id = (SELECT id FROM departments WHERE name = 'Sales');
在这个例子中,子查询返回销售部的 ID,然后外部查询使用这个 ID 来查找所有在销售部工作的员工。
- 子查询在 FROM 子句中
例如,我们想要查找每个部门的平均薪水,然后找出高于这个平均数的部门。
SELECT a.* FROM departments a
JOIN (SELECT department_id, AVG(salary) as avg_salary FROM employees GROUP BY department_id) b
ON a.id = b.department_id
WHERE a.salary > b.avg_salary;
在这个例子中,子查询返回每个部门的平均薪水,然后外部查询使用这个数据来找出薪水高于部门平均数的部门。
- 子查询在 SELECT 列表中
例如,我们想要查找每个部门的员工数量。
SELECT d.*, (SELECT COUNT(*) FROM employees WHERE department_id = d.id) AS employee_count
FROM departments d;
在这个例子中,子查询返回每个部门的员工数量,然后外部查询返回部门信息和子查询返回的员工数量。
以上就是子查询的基本使用方法,子查询可以更复杂,例如可以使用 IN、ANY、ALL 等操作符和子查询一起使用,但基本概念是相同的:子查询产生的结果被用于外部查询。
评论已关闭