类别:

条件表达式函数

[ NOT ] IN

测试其实参是否是显式列表的成员之一或子查询的结果。

备注

在子查询形式中,IN 等效于 = ANY,而 NOT IN 等效于 <> ALL

小技巧

您可以使用搜索优化服务,提高用于调用此函数的查询的性能。有关详细信息,请参阅 搜索优化服务

语法

要比较各个值,请运行以下语句:

<value> [ NOT ] IN ( <value_1> [ , <value_2> ...  ] )
Copy

要比较 *行构造函数*(带括号的值列表),请运行以下语句:

( <value_A> [, <value_B> ... ] ) [ NOT ] IN (  ( <value_1> [ , <value_2> ... ] )  [ , ( <value_3> [ , <value_4> ... ] )  ...  ]  )
Copy

要将值与子查询返回的值进行比较,请运行以下语句:

<value> [ NOT ] IN ( <subquery> )
Copy

参数

value

要搜索的值。

value_Avalue_B

要搜索的行构造函数的元素。

确保 IN 右侧的每个值(例如 (value3, value4))具有的元素数量都与 IN 左侧的值(例如 (value_A, value_B))相同。

value_#

value 应与之比较的值。

如果要比较的值是行构造函数,则每个 value_# 都是行构造函数的单个元素。

subquery

一个子查询,返回 value 可与之比较的值的列表。

使用说明

  • 与在大多数上下文中一样,NULL 不等于 NULL。如果 value 为 NULL,则函数的返回值为 NULL,而无论列表或子查询是否包含 NULL。

    例如,以下语句返回 NULL 而不是 TRUE:

    SELECT NULL IN (1, 2, NULL) AS RESULT;
    
    Copy
  • 在语法上,IN 被视为运算符而不是函数。下面的示例显示了使用 IN 作为运算符与将 f() 作为函数调用之间的区别:

    SELECT
        f(a, b),
        x IN (y, z) ...
    
    Copy

    不能 将函数语法与 IN 一起使用。例如,不能将前面的示例重写为:

    SELECT
        f(a, b),
        IN(x, (y, z)) ...
    
    Copy
  • IN 也被视为 子查询运算符

排序规则详细信息

Arguments with collation specifications are currently not supported.

示例

将 IN 与简单字面量一起使用

以下示例演示如何将 INNOT IN 与简单字面量一起使用:

SELECT 1 IN (1, 2, 3) AS RESULT;
+--------+
| RESULT |
|--------|
| True   |
+--------+
Copy
SELECT 4 NOT IN (1, 2, 3) AS RESULT;
+--------+
| RESULT |
|--------|
| True   |
+--------+
Copy

将 IN 与子查询一起使用

SELECT 'a' IN (
    SELECT column1 FROM VALUES ('b'), ('c'), ('d')
    ) AS RESULT;
+--------+
| RESULT |
|--------|
| False  |
+--------+
Copy

将 IN 与表一起使用

以下示例演示如何将 IN 与表一起使用。下面的语句创建示例中使用的表。

CREATE TABLE my_table (col_1 INTEGER, col_2 INTEGER, col_3 INTEGER);
INSERT INTO my_table (col_1, col_2, col_3) VALUES
    (1, 1, 1),
    (1, 2, 3),
    (4, 5, NULL);
Copy

此示例演示如何将 IN 与表的单个列一起使用:

SELECT col_1, col_2, col_3
    FROM my_table
    WHERE (col_1) IN (1, 10, 100, 1000)
    ORDER BY col_1, col_2, col_3;
+-------+-------+-------+
| COL_1 | COL_2 | COL_3 |
|-------+-------+-------|
|     1 |     1 |     1 |
|     1 |     2 |     3 |
+-------+-------+-------+
Copy

此示例演示如何将 IN 与表的多个列一起使用:

SELECT col_1, col_2, col_3
    FROM my_table
    WHERE (col_1, col_2, col_3) IN ( 
                                   (1,2,3), 
                                   (4,5,6)
                                   );
+-------+-------+-------+
| COL_1 | COL_2 | COL_3 |
|-------+-------+-------|
|     1 |     2 |     3 |
+-------+-------+-------+
Copy

此示例演示如何将 IN 与读取表的多个列的子查询一起使用:

SELECT (1, 2, 3) IN (
    SELECT col_1, col_2, col_3 FROM my_table
    ) AS RESULT;
+--------+
| RESULT |
|--------|
| True   |
+--------+
Copy

使用 NULL

请注意,NULL != NULL。当 IN 左侧或右侧的值包含 NULL 时,以下查询均不会返回匹配项:

SELECT NULL IN (1, 2, NULL) AS RESULT;
+--------+
| RESULT |
|--------|
| NULL   |
+--------+
Copy
SELECT (4, 5, NULL) IN ( (4, 5, NULL), (7, 8, 9) ) AS RESULT;
+--------+
| RESULT |
|--------|
| NULL   |
+--------+
Copy
语言: 中文