MySQL IN

摘要:在本教程中,您将学习如何使用 MySQL IN运算符来确定指定值是否与值列表中的任何值匹配。

MySQL IN 运算符简介

IN运算符允许您确定某个值是否与值列表中的任何值匹配。 IN运算符的语法如下:

value IN (value1, value2, value3,...)Code language: SQL (Structured Query Language) (sql)

如果value等于列表中的任何值( value1value2value3等),则IN运算符返回 1 (true)。否则,返回 0。

在这个语法中:

  • 首先,在IN运算符左侧指定要测试的值。该值可以是列或表达式。
  • 其次,指定要在括号中匹配的以逗号分隔的值列表。

IN运算符在功能上等同于多个OR运算符的组合:

value = value1 OR value = value2 OR value = value3 OR ...Code language: SQL (Structured Query Language) (sql)

以下示例返回 1,因为 1 在列表中:

SELECT 1 IN (1,2,3);
+--------------+
| 1 IN (1,2,3) |
+--------------+
|            1 |
+--------------+
1 row in set (0.00 sec)Code language: plaintext (plaintext)

以下示例返回 0,因为 4 不在列表中:

SELECT 4 IN (1,2,3);
+--------------+
| 4 IN (1,2,3) |
+--------------+
|            0 |
+--------------+
1 row in set (0.00 sec)Code language: plaintext (plaintext)

实际上,您将使用IN运算符在SELECTDELETEUPDATE语句的WHERE子句中形成条件。此外,您还将在包含子查询的查询中使用IN运算符。

MySQL IN 运算符和 NULL

一般来说, IN运算符在两种情况下返回NULL

  • 运算符左侧的value NULL。
  • 该值不等于列表中的任何值,并且列表中的值之一为 NULL。

以下示例返回 NULL,因为 IN 运算符左侧的值为 NULL:

SELECT NULL IN (1,2,3);Code language: PHP (php)
+-----------------+
| NULL IN (1,2,3) |
+-----------------+
|            NULL |
+-----------------+
1 row in set (0.00 sec)Code language: plaintext (plaintext)

以下示例也返回 NULL,因为 0 不等于列表中的任何值,并且列表中有一个 NULL:

SELECT 0 IN (1 , 2, 3, NULL);Code language: PHP (php)
+-----------------------+
| 0 IN (1 , 2, 3, NULL) |
+-----------------------+
|                  NULL |
+-----------------------+
1 row in set (0.00 sec)Code language: plaintext (plaintext)

以下示例也返回 NULL,因为 NULL 不等于列表中的任何值,并且列表中有一个 NULL。请注意,NULL 不等于 NULL。

SELECT NULL IN (1 , 2, 3, NULL);Code language: PHP (php)

MySQL IN 运算符示例

请参阅示例数据库中的以下offices表:

MySQL IN Operator - Sample Table

以下示例使用IN运算符查找位于美国和法国的办事处:

SELECT 
    officeCode, 
    city, 
    phone, 
    country
FROM
    offices
WHERE
    country IN ('USA' , 'France');Code language: SQL (Structured Query Language) (sql)

试试看

+------------+---------------+-----------------+---------+
| officeCode | city          | phone           | country |
+------------+---------------+-----------------+---------+
| 1          | San Francisco | +1 650 219 4782 | USA     |
| 2          | Boston        | +1 215 837 0825 | USA     |
| 3          | NYC           | +1 212 555 3000 | USA     |
| 4          | Paris         | +33 14 723 4404 | France  |
+------------+---------------+-----------------+---------+
4 rows in set (0.01 sec)Code language: plaintext (plaintext)

您还可以使用OR运算符得到相同的结果,如下所示:

SELECT 
    officeCode, 
    city, 
    phone
FROM
    offices
WHERE
    country = 'USA' OR country = 'France';Code language: SQL (Structured Query Language) (sql)

试试看

如果列表有很多值,您需要使用多个OR运算符构造一个非常长的语句。因此, IN运算符允许您缩短查询并使其更具可读性。

概括

  • 使用IN运算符检查某个值是否在一组值中。
  • 使用IN运算符构成WHERE子句的条件。
本教程有帮助吗?