子查询是MySQL中一种查询嵌套在另一条查询中的SELECT语句。子查询可以在SELECT、WHERE、HAVING、FROM子句中使用。
子查询的基本形式为:
sql
SELECT ...
FROM ...
WHERE column operator (
SELECT ...
)
例如:
- 在SELECT子句中使用子查询:
sql
SELECT *, (SELECT col FROM table2 WHERE ...) AS col
FROM table1;
这会在查询结果中添加一列,内容来自子查询的输出。
- 在WHERE子句中使用子查询进行过滤:
sql
SELECT * FROM table1
WHERE col IN (SELECT col FROM table2 WHERE ...);
这会返回table1中col字段的值在子查询结果集中的行。
- 在FROM子句中使用子查询作为临时表:
sql
SELECT *
FROM (SELECT * FROM table1 WHERE ...) AS t1,
table2
WHERE t1.col = table2.col;
这种用法称为子查询连接,使用子查询作为中间表进行多表连接查询。
- 在HAVING子句中使用子查询进行过滤:
sql
SELECT col, COUNT(*) AS num
FROM table1
GROUP BY col
HAVING num > (SELECT COUNT(*) FROM table2 WHERE ...);
这会返回在GROUP BY 分组后满足子查询条件的聚合结果。