首页 MySQL NOT IN 使用说明

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 检查左侧值是否不包含于右侧的值列表中。
特别声明:本站部分内容收集于互联网是出于更直观传递信息的目的。该内容版权归原作者所有,并不代表本站赞同其观点和对其真实性负责。如该内容涉及任何第三方合法权利,请及时与824310991@qq.com联系,我们会及时反馈并处理完毕。