相关子查询

Exisi 2023-03-05 19:34:22
Categories: Tags:
  • 如果子查询的执行依赖于外部查询,通常情况下都是因为子查询中的表用到了外部的表,并进行了条件关联,因此每执行一次外部查询,子查询都要重新计算一次,这样的子查询就称之为关联子查询

 

  • 要想执行内层的查询,需要先引用外层的数据查询到一个值。子查询每引用外部的表一次,进行一次查询,总查询次数是外部与内部相乘 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>