⌘+k ctrl+k
1.3 (稳定版)
搜索快捷键 cmd + k | ctrl + k
IN 运算符

IN 运算符用于检查左侧表达式是否包含在右侧(RHS)的集合中。RHS 支持的集合包括元组、列表、映射和返回单个列的子查询。

IN (val1, val2, ...) (元组)

元组 (val1, val2, ...) 上的 IN 运算符在表达式存在于 RHS 中时返回 true;如果表达式不在 RHS 中且 RHS 没有 NULL 值,则返回 false;如果表达式不在 RHS 中且 RHS 包含 NULL 值,则返回 NULL

SELECT 'Math' IN ('CS', 'Math');
true
SELECT 'English' IN ('CS', 'Math');
false
SELECT 'Math' IN ('CS', 'Math', NULL);
true
SELECT 'English' IN ('CS', 'Math', NULL);
NULL

IN [val1, val2, ...] (列表)

IN 运算符对列表的操作遵循 Python 中使用的语义。与 IN tuple 运算符不同,表达式右侧存在 NULL 值不会影响结果。

SELECT 'Math' IN ['CS', 'Math', NULL];
true
SELECT 'English' IN ['CS', 'Math', NULL];
false

IN 映射

IN 运算符对 映射的操作遵循 Python 中使用的语义,即,它检查键(而非值)是否存在。

SELECT 'key1' IN MAP {'key1': 50, 'key2': 75};
true
SELECT 'key3' IN MAP {'key1': 50, 'key2': 75};
false

IN 子查询

IN 运算符适用于返回单个列的 子查询。例如

SELECT 42 IN (SELECT unnest([32, 42, 52]) AS x);
true

如果子查询返回多于一列,将抛出 Binder 错误

SELECT 42 IN (SELECT unnest([32, 42, 52]) AS x, 'a' AS y);
Binder Error:
Subquery returns 2 columns - expected 1

IN 字符串

IN 运算符可以用作 contains 字符串函数的简写。例如

SELECT 'Hello' IN 'Hello World';
true

NOT IN

NOT IN 可用于检查元素是否不存在于集合中。x NOT IN y 等同于 NOT (x IN y)