子查询运算符¶
子查询 是另一个查询中的一个查询。子查询运算符对子查询产生的值执行运算。
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> )
使用说明¶
示例¶
使用相关 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);