子查询是由一个查询组成的表达式。当子查询引用了子查询之外的列时,子查询与外部查询是相关的。Presto 对相关子查询的支持比较有限。

EXISTS

谓语EXISTS用于确定子查询是否返回所有行,如果子查询有返回值, WHERE 表达式为 TRUE,否则为 FALSE。

示例:

SELECT name
FROM nation
WHERE EXISTS (SELECT * FROM region WHERE region.regionkey = nation.regionkey);

IN

如果WHERE指定的列在子查询结果集中存在,则返回结果,否则不返回。子查询只能返回一个列。

示例:

SELECT name
FROM nation
WHERE regionkey IN (SELECT regionkey FROM region);

标量子查询

标量子查询是一个非相关子查询,返回 0~1 行结果。该类子查询最多只能返回一行数据,如果子查询结果集为空,则返回null

示例:

SELECT name
FROM nation
WHERE regionkey = (SELECT max(regionkey) FROM region)