FROM 子句的集合子查询

集合子查询在 SELECT 的 FROM 子句中有效,外部查询可使用子查询返回的值作为数据源。

集合子查询这一节中的查询示例通过使用 TABLE 关键字后面(括号内)跟 MULTISET 关键字然后跟子查询来指定集合子查询。该语法是对 SQL 语言的 ANSI/ISO 标准的 GBase 8s 扩展。

在(且仅在)SELECT 语句的 FROM 子句中,可以通过指定子查询、省略 TABLE 和 MULTISET 关键字和嵌套的括号来代替 SQL 的 ANSI/ISO 标准的语法,以指定集合子查询。

下列查询使用 GBase 8s 扩展语法连接外部查询的 FROM 子句中的两个集合子查询:

图: 查询

SELECT * FROM TABLE(MULTISET(SELECT SUM(C1) FROM T1 GROUP BY C1)),
          TABLE(MULTISET(SELECT SUM(C1) FROM T2 GROUP BY C2));
通过使用符合 ANSI/ISO 的语法来连接外部查询的 FROM 子句中的两个派生表,下列查询在逻辑上等价于上述返回相同结果的查询:

图: 查询

SELECT * FROM (SELECT SUM(C1) FROM T1 GROUP BY C1),
          (SELECT SUM(C1) FROM T2 GROUP BY C2);

该查询优于 TABLE(MULTISET(SELECT ...)) GBase 8s 扩展版本之处在于,任何支持 FROM 子句中符合 ANSI/ISO 语法的数据库服务器也可以执行该查询。有关集合子查询的语法和限制的更多信息,请参阅 GBase 8s SQL 指南:语法