MySQL NOT IN 使用说明
NOT IN
是 IN
的否定操作符,本文通过实例介绍了 MySQL 中如何使用 NOT IN
判断一个值是否不包含在一个值列表中。
NOT
是一个逻辑运算符,用来用来否定一个操作。NOT IN
是 IN
的否定操作符。
MySQL NOT IN 语法
NOT IN
和 IN
用法几乎一样,只是在 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 实例
在实际开发中,我们会在 SELECT
、UPDATE
、DELETE
语句中的 WHERE 子句中使用 NOT IN
运算符。在 NOT IN
运算符中,除了与值列表比较,还可能与子查询进行比较。
在以下实例中,我们使用 Sakila 示例数据库中的语言表 language
表作为演示。
以下查询使用 WHERE
子句查找不是 French
或 German
的所有影片的语言信息。
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 IN
是IN
运算符的否定操作。NOT IN
检查左侧值是否不包含于右侧的值列表中。