⌘+k ctrl+k
1.4 (LTS)
搜索快捷键 cmd + k | ctrl + k
IN 运算符

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

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

IN 运算符作用于元组 (val1, val2, ...) 时,如果表达式存在于 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 元组运算符不同,表达式右侧是否存在 NULL 值不会改变结果。

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

IN 映射 (Map)

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

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 Error)。

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)

© 2025 DuckDB 基金会,阿姆斯特丹,荷兰
行为准则 商标使用指南