子查询运算符¶
本主题提供有关 Snowflake 中支持的子查询运算符的参考信息。子查询是另一个查询中的一个查询。
本主题内容:
ALL/ANY¶
ALL 和 ANY 关键字可用于将比较运算符应用于子查询生成的值(可以返回多行)。
语法¶
<expr> comparisonOperator { ALL | ANY} ( <query> )
其中:
comparisonOperator ::= { = | != | > | >= | < | <= }
使用说明¶
示例¶
使用 != ALL
子查询查找没有员工的部门:
SELECT department_id FROM departments d WHERE d.department_id != ALL (SELECT e.department_id FROM employees e);
[ NOT ] EXISTS¶
EXISTS 子查询是一个布尔表达式,可以出现在 WHERE 或 HAVING 子句中,也可以出现在对布尔表达式进行操作的任何函数中:
如果子查询生成了任何行,则 EXISTS 表达式的计算结果是 TRUE。
如果子查询未生成任何行,则 NOT EXISTS 表达式的计算结果为 TRUE。
语法¶
[ NOT ] EXISTS ( <query> )
使用说明¶
当前仅在 WHERE 子句中支持相关 EXISTS 子查询。
相关 EXISTS 子查询不能作为 OR 运算符的实参。
任何允许布尔表达式的地方都支持非相关 EXISTS 子查询。
示例¶
使用相关 NOT EXISTS 子查询查找没有员工的部门:
SELECT department_id FROM departments d WHERE NOT EXISTS (SELECT 1 FROM employees e WHERE e.department_id = d.department_id);
[ NOT ] IN¶
IN 和 NOT IN 运算符检查表达式是否包含在子查询返回的值中。
语法¶
<expr> [ NOT ] IN ( <query> )
使用说明¶
IN 是
= ANY
的简写,并且受到与 ANY 子查询相同的限制。NOT IN 是
!= ALL
的简写,并且受到与 ALL 子查询相同的限制。[NOT] IN
还可以在不涉及子查询的表达式中用作运算符。有关详细信息,请参阅 [ NOT ] IN。
示例¶
使用与 != ALL
子查询示例等效的子查询 NOT IN (本主题前面提到过):
SELECT department_id FROM departments d WHERE d.department_id NOT IN (SELECT e.department_id FROM employees e);