推荐答案
在 MySQL 中,子查询(Subquery)是指嵌套在其他查询中的查询。子查询可以出现在 SELECT
、FROM
、WHERE
或 HAVING
子句中。子查询的结果可以作为外部查询的条件或数据源。
基本语法
SELECT column_name(s) FROM table_name WHERE column_name OPERATOR (SELECT column_name FROM table_name WHERE condition);
示例
SELECT name, salary FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);
在这个例子中,子查询 (SELECT AVG(salary) FROM employees)
返回所有员工的平均工资,外部查询则返回工资高于平均工资的员工姓名和工资。
本题详细解读
子查询的类型
标量子查询(Scalar Subquery):返回单个值的子查询,通常用于
SELECT
、WHERE
或HAVING
子句中。SELECT name FROM employees WHERE salary = (SELECT MAX(salary) FROM employees);
行子查询(Row Subquery):返回一行数据的子查询,通常用于
WHERE
子句中。SELECT name FROM employees WHERE (salary, department) = (SELECT MAX(salary), department FROM employees GROUP BY department);
列子查询(Column Subquery):返回一列数据的子查询,通常用于
IN
或ANY
等操作符中。SELECT name FROM employees WHERE department IN (SELECT department FROM departments WHERE location = 'New York');
表子查询(Table Subquery):返回一个表的子查询,通常用于
FROM
子句中。SELECT e.name, d.department_name FROM (SELECT * FROM employees WHERE salary > 50000) AS e JOIN departments AS d ON e.department_id = d.department_id;
子查询的使用场景
- 过滤数据:在
WHERE
子句中使用子查询来过滤数据。 - 计算字段:在
SELECT
子句中使用子查询来计算字段。 - 数据源:在
FROM
子句中使用子查询作为数据源。 - 条件判断:在
HAVING
子句中使用子查询进行条件判断。
注意事项
- 子查询必须用括号括起来。
- 子查询可以嵌套,但嵌套层数过多会影响性能。
- 子查询的结果集必须与外部查询的条件兼容。
通过合理使用子查询,可以编写出更加灵活和强大的 SQL 查询语句。