子查询可依赖于外部 SELECT 语句正在求值的当前行;在此情况下,该子查询称为相关的子查询。(要获取相关的子查询及其对性能的影响的讨论,请参阅 GBase 8s SQL 教程指南。)
依赖于子查询的上下文,子查询可返回单个值、无值或值集。如果子查询返回值,它必须仅选择单个列。如果子查询简单地检查一行(或多行)是否存在,则它可选择任何数目的行和列。
子查询不可引用 BYTE 或 TEXT 列,也不可包含 ORDER BY 子句。然而,在 FROM 子句中指定表表达式的子查询可包括 ORDER BY 子句。
下列程序片断包括在 UPDATE 和 DELETE 语句中带有子查询的条件的示例:
CREATE TABLE t1 ( a INT, a1 INT) CREATE TABLE t2 ( b INT, b1 INT) ; . . . UPDATE t1 SET a = a + 10 WHERE EXISTS (SELECT a FROM t1 WHERE a > 1); UPDATE t1 SET a = a + 10 WHERE a IN (SELECT a FROM t1, t2 WHERE a > b AND a IN (SELECT a FROM t1 WHERE a > 50 ) ); DELETE FROM t1 WHERE EXISTS (SELECT a FROM t1);
要获取更多关于在 DELETE 语句中的子查询的信息,请参阅 DELETE 的 WHERE 子句中的子查询。
要获取更多关于在 UPDATE 语句中的子查询的信息,请参阅 UPDATE 的 WHERE 子句中的子查询。