MySQL NOT IN 使用说明

NOT ININ 的否定操作符,本文通过实例介绍了 MySQL 中如何使用 NOT IN 判断一个值是否不包含在一个值列表中。

NOT 是一个逻辑运算符,用来用来否定一个操作。NOT ININ 的否定操作符。

MySQL NOT IN 语法

NOT ININ 用法几乎一样,只是在 IN 前面添加一个 NOT 关键字,IN 的否定操作符。 NOT IN 语法如下:

expression NOT IN (value1, value2, ...)

用法说明:

  • NOT 是一个否定逻辑运算符。
  • expression 可以是一个字段名、值或其他的表达式(比如函数调用、运算等)。
  • (value1, value2, ...) 是一个值列表,多个值之间使用 , 分隔,并使用小括号 () 将它们包围起来。
  • value1 是具体的值,比如:1, 2, 'A', 'B' 等。
  • (value1, value2, ...) 最少可以是 1 个值,比如 (1), ('A')

MySQL NOT IN 运算规则

NOT IN 检查一个字段或值是否不包含于一个值列表中,如果值不包含在值列表中,返回 1,否则返回 0

NOT IN 操作符想弹雨多个 OR 组合操作的否定操作,比如下面的语句:

name NOT IN ('Alice', 'Tim', 'Jack')

相当于下面的 NOT 语句:

NOT (name = 'Alice' OR name = 'Tim' OR name = 'Jack')

由于 = 的反义词是 <>,因此也相当于下面的语句:

name <> 'Alice' AND name <> 'Tim' AND name <> 'Jack'

NOT IN 运算符的运算规则如下:

  • 当左侧和右侧都没有 NULL 时,右侧值列表不包含左侧的值时返回 1,否则返回 0

    SELECT 1 NOT IN (1, 2), 3 NOT IN (1, 2), 'A' NOT IN ('A', 'B'), 'C' NOT IN ('A', 'B');
    
    +-----------------+-----------------+-----------------------+-----------------------+
    | 1 NOT IN (1, 2) | 3 NOT IN (1, 2) | 'A' NOT IN ('A', 'B') | 'C' NOT IN ('A', 'B') |
    +-----------------+-----------------+-----------------------+-----------------------+
    |               0 |               1 |                     0 |                     1 |
    +-----------------+-----------------+-----------------------+-----------------------+
  • 当左侧操作数为 NULL,返回 NULL

    SELECT NULL NOT IN (1, 2), NULL NOT IN (1, 2, NULL);
    
    +--------------------+--------------------------+
    | NULL NOT IN (1, 2) | NULL NOT IN (1, 2, NULL) |
    +--------------------+--------------------------+
    |               NULL |                     NULL |
    +--------------------+--------------------------+
  • 当右侧值列表含有 NULL,如果包含左侧的非 NULL 值,返回 0,否则返回 NULL

    SELECT 1 NOT IN (1, NULL), 2 NOT IN (1, NULL);
    
    +--------------------+--------------------+
    | 1 NOT IN (1, NULL) | 2 NOT IN (1, NULL) |
    +--------------------+--------------------+
    |                  0 |               NULL |
    +--------------------+--------------------+

MySQL NOT IN 实例

在实际开发中,我们会在 SELECTUPDATEDELETE 语句中的 WHERE 子句中使用 NOT IN 运算符。在 NOT IN 运算符中,除了与值列表比较,还可能与子查询进行比较。

在以下实例中,我们使用 Sakila 示例数据库中的语言表 language作为演示。

以下查询使用 WHERE 子句查找不是 FrenchGerman 的所有影片的语言信息。

SELECT * FROM language WHERE name NOT IN ('French' , 'German');
+-------------+----------+---------------------+
| language_id | name     | last_update         |
+-------------+----------+---------------------+
|           1 | English  | 2006-02-15 05:02:19 |
|           2 | Italian  | 2006-02-15 05:02:19 |
|           3 | Japanese | 2006-02-15 05:02:19 |
|           4 | Mandarin | 2006-02-15 05:02:19 |
+-------------+----------+---------------------+

同样,如果您执行下面的两个语句,您会发现他们的结果与上面的语句相同。

SELECT * FROM language WHERE NOT (name = 'French' OR name = 'German');
SELECT * FROM language WHERE name <> 'French' AND name <> 'German';

结论

本文通过实例介绍了 MySQL 中 NOT IN 运算符的语法和用法。 NOT IN 运算符的用法要点如下:

  • NOT ININ 运算符的否定操作。
  • NOT IN 检查左侧值是否不包含于右侧的值列表中。