什么是MySQL中的子查询?

子查询是MySQL中一种查询嵌套在另一条查询中的SELECT语句。子查询可以在SELECT、WHERE、HAVING、FROM子句中使用。
子查询的基本形式为:

sql
SELECT ...
FROM ...
WHERE column operator (
    SELECT ...
)

例如:

  1. 在SELECT子句中使用子查询:
sql
SELECT *, (SELECT col FROM table2 WHERE ...) AS col 
FROM table1;

这会在查询结果中添加一列,内容来自子查询的输出。

  1. 在WHERE子句中使用子查询进行过滤:
sql 
SELECT * FROM table1
WHERE col IN (SELECT col FROM table2 WHERE ...);

这会返回table1中col字段的值在子查询结果集中的行。

  1. 在FROM子句中使用子查询作为临时表:
sql
SELECT * 
FROM (SELECT * FROM table1 WHERE ...) AS t1, 
     table2
WHERE t1.col = table2.col;

这种用法称为子查询连接,使用子查询作为中间表进行多表连接查询。

  1. 在HAVING子句中使用子查询进行过滤:
sql
SELECT col, COUNT(*) AS num 
FROM table1
GROUP BY col
HAVING num > (SELECT COUNT(*) FROM table2 WHERE ...);

这会返回在GROUP BY 分组后满足子查询条件的聚合结果。