- 如果子查询的执行依赖于外部查询,通常情况下都是因为子查询中的表用到了外部的表,并进行了条件关联,因此每执行一次外部查询,子查询都要重新计算一次,这样的子查询就称之为关联子查询
- 要想执行内层的查询,需要先引用外层的数据查询到一个值。子查询每引用外部的表一次,进行一次查询,总查询次数是外部与内部相乘 m * n,类似于双层的 for 循环
- 相关子查询是由外部查询驱动内部查询。 而正常的嵌套查询中,内部查询首先被立即执行,总查询次数为外部加上内部查询的次数 m + n
- 相关子查询内部查询依赖于外部查询进行处理,而在嵌套查询中外部查询依赖于内部查询。使用相关子查询会使性能降低,因为它执行的次数远远大于嵌套查询的次数
语法
SELECT a_tbl_name.<column_name>
FROM a_tbl_name
WHERE where_condition {= | > | < | >= | <= | <> | != | <=>}
[ANY | SOME | ALL]
| [NOT] IN | [NOT] EXISTS
(SELECT b_tbl_name.<column_name>, …
FROM b_tbl_name
WHERE b_tbl_name.<column_name> = a_tbl_name.<column_name>);
参数 |
说明 |
a_tbl_name b_tbl_name |
数据表名 |
<column_name> |
数据列名 |
where_condition |
条件语句 |
示例
SELECT *
FROM student s
WHERE 80 <= (SELECT c.score
FROM course c
WHERE c.id=s.id);
来自 <https://dev.mysql.com/doc/refman/8.0/en/correlated-subqueries.html>