MySQL IN 运算符的用法

本文通过实例介绍了 MySQL 中如何使用 IN 运算符来判断一个值是否包含在一个值列表中。

在使用 SQL 查询的时候,我们可能需要判断一个字段的值是否位于一组值中,这就需要用到 IN 运算符了。

IN 运算符用来检查一个字段或值是否包含在一个集合中,如果值包含在集合中返回 1,否则返回 0

MySQL IN 语法

IN 是一个双目运算符,它需要 2 个操作数。以下是 IN 运算符的语法:

expression IN (value1, value2, ...)

用法说明:

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

MySQL IN 运算规则

IN 运算符当左侧的操作数的值是右侧操作数集合列表中的其中一个时, IN 运算符返回 1。否则 返回 0

IN 运算符其实是多个 OR 运算符组合的简化版本。比如下面的 IN 语句:

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

相当于下面的 OR 语句:

name = 'Alice' OR name = 'Tim' OR name = 'Jack'

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

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

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

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

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

MySQL IN 实例

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

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

以下查询使用 WHERE 子句查找姓氏为 ALLENDAVIS 的所有演员。这个语句和我们的 MySQL OR 教程中的实例语句结果完全相同。

SELECT
    *
FROM
    actor
WHERE
    last_name IN ('ALLEN', 'DAVIS');
+----------+------------+-----------+---------------------+
| actor_id | first_name | last_name | last_update         |
+----------+------------+-----------+---------------------+
|      118 | CUBA       | ALLEN     | 2006-02-15 04:34:33 |
|      145 | KIM        | ALLEN     | 2006-02-15 04:34:33 |
|      194 | MERYL      | ALLEN     | 2006-02-15 04:34:33 |
|        4 | JENNIFER   | DAVIS     | 2006-02-15 04:34:33 |
|      101 | SUSAN      | DAVIS     | 2006-02-15 04:34:33 |
|      110 | SUSAN      | DAVIS     | 2006-02-15 04:34:33 |
+----------+------------+-----------+---------------------+

结论

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

  • IN 是一个双目运算符,需要 2 个操作数。
  • IN 运算符左侧操作数是字段名或者值,右侧操作数是值列表或者子查询结果。
  • IN 运算符左侧的操作数的值是右侧操作数集合列表中的其中一个时,返回 1。否则 返回 0
  • IN 运算符可以看作是多个 OR 运算符组合的简化版本。
  • IN 运算符的否定操作是 NOT IN