首页 > 数据库技术 > 详细

MySQL的SQL语句 - 数据操作语句(13)- 子查询(8)

时间:2020-12-04 16:53:54      阅读:25      评论:0      收藏:0      [点我收藏+]
关联子查询

关联子查询是一个子查询,它包含对同时出现在外部查询中的表的引用。例如:


1.SELECT * FROM t1
2.  WHERE column1 = ANY (SELECT column1 FROM t2
3.                       WHERE t2.column2 = t1.column2);

请注意,子查询包含对 t1 列的引用,即使子查询的 FROM 子句没有提到表 t1。因此,MySQL 在子查询之外查找,在外部查询中找到 t1。

假设表 t1 包含一行,其中 column1 = 5 并且 column2 = 6;同时,表 t2 包含 column1 = 5 并且 column2 = 7 的行。简单的表达式 ... WHERE column1 = ANY (SELECT column1 FROM t2) 将为 TRUE,但在本例中,子查询中的 WHERE 子句为 FALSE(因为 (5,6) 不等于 (5,7)),因此整个表达式为 FALSE。

作用域规则:MySQL 从内部到外部进行计算。例如:

1.SELECT column1 FROM t1 AS x
2.  WHERE x.column1 = (SELECT column1 FROM t2 AS x
3.    WHERE x.column1 = (SELECT column1 FROM t3
4.      WHERE x.column2 = t3.column1));

在这个语句中,x.column2 必须是表 t2 中的一列,因为 SELECT column1 FROM t2 AS x ... 重命名了 t2。它不是表 t1 中的列,因为 SELECT column1 FROM t1 ... 是一个更远的外部查询。

官方网址:
https://dev.mysql.com/doc/refman/8.0/en/correlated-subqueries.html

MySQL的SQL语句 - 数据操作语句(13)- 子查询(8)

原文:https://blog.51cto.com/15023289/2559609

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!