6.3.1 相关子查询
相关子查询是引用不列在其 FROM 子句中的表的列的子查询。该列可以在 Projection 子
句或在 WHERE 子句中。要查找相关子查询引用的表,搜索列直到找到相关为止。
通常,相关子查询会降低性能。在子查询中使用表名或别名,这样就不会对所在的表产生
疑问。
数据库服务器将使用外查询来获取值。例如:如果表 taba 具有列 col1,表 tabb 具有列 col2,
并且它们包含以下内容:
taba.col1 aa,bb,null
tabb.col2 bb, null
那么查询为:
select * from taba where col1 in (select col1 from tabb);
那么结果可能会毫无意义。数据库服务器将提供 taba.col1 中所有的值,并接着它们
与 taba.col1 进行比较(外查询 WHERE 子句)。这将返回所有的行。通常使用子查询从内
表返回列值。如果查询写成:
select * from taba where col1 in (select tabb.col1 from tabb);
那么将导致错误 error -217 column not found。
相关子查询的重要功能是,由于它取决于来自外部 SELECT 的值。所以必须重复执行它,
对外部 SELECT 产生的每个值执行一次。非相关子查询只能执行一次。
GBase 8s V8.8 SQL 指南:教程-6.3.1
最新推荐文章于 2024-09-21 11:30:16 发布