概述:本教程将介绍如何使用 SQL IN
运算符检查值是否在值集中。
SQL IN 运算符简介
IN
是 SQL 中的 逻辑运算符。如果某个值属于某个值集,则 IN
运算符返回 true;否则返回 false。
以下内容说明了 IN
运算符的语法
expression IN (value1,value2,...)
Code language: SQL (Structured Query Language) (sql)
从技术上讲,可以用 =
和 OR
运算符替代 IN 运算符。使用 IN
运算符的条件可以用一个或多个 OR
运算符改写如下
expression = value1 OR expression = value2 OR ...
Code language: SQL (Structured Query Language) (sql)
若要否定 IN
运算符,请使用 NOT
运算符
expression NOT IN (value1, value2,...)
Code language: SQL (Structured Query Language) (sql)
如果 expression
不等于列表中的任何值,则 NOT IN
运算符返回 true;否则返回 false。
若要替代 IN 运算符,可以用 !=
和 AND
运算符,如下所示
expression != value1 AND expression != value2 AND...
Code language: SQL (Structured Query Language) (sql)
请注意,如果列表 (value1,value2,...)
中的任何值为 null,则 IN
运算符不返回任何行。
在实践中,通常将在 WHERE
子句中使用 SELECT
语句的 IN
和 NOT IN
运算符,以选择具有值集中的值的那些行。此外,你还会在 子查询 中使用 IN
运算符。
SQL IN 示例
我们将使用 示例数据库 中的 employees
表来演示 IN
运算符的功能。

以下示例使用 IN
运算符来查找 job id 为 8、9 或 10 的员工
SELECT
employee_id,
first_name,
last_name,
job_id
FROM
employees
WHERE
job_id IN (8, 9, 10)
ORDER BY
job_id;
Code language: SQL (Structured Query Language) (sql)
+-------------+------------+-----------+--------+
| employee_id | first_name | last_name | job_id |
+-------------+------------+-----------+--------+
| 203 | Susan | Mavris | 8 |
| 103 | Alexander | Hunold | 9 |
| 104 | Bruce | Ernst | 9 |
| 105 | David | Austin | 9 |
| 106 | Valli | Pataballa | 9 |
| 107 | Diana | Lorentz | 9 |
| 201 | Michael | Hartstein | 10 |
+-------------+------------+-----------+--------+
以下示例使用 NOT IN
运算符来查找 job id 不是 7、8 或 9 的员工
SELECT
employee_id,
first_name,
last_name,
job_id
FROM
employees
WHERE
job_id NOT IN (7, 8, 9)
ORDER BY
job_id;
Code language: SQL (Structured Query Language) (sql)
+-------------+-------------+-------------+--------+
| employee_id | first_name | last_name | job_id |
+-------------+-------------+-------------+--------+
| 206 | William | Gietz | 1 |
| 205 | Shelley | Higgins | 2 |
| 200 | Jennifer | Whalen | 3 |
| 100 | Steven | King | 4 |
| 102 | Lex | De Haan | 5 |
| 101 | Neena | Kochhar | 5 |
| 109 | Daniel | Faviet | 6 |
| 113 | Luis | Popp | 6 |
| 110 | John | Chen | 6 |
| 111 | Ismael | Sciarra | 6 |
| 112 | Jose Manuel | Urman | 6 |
| 201 | Michael | Hartstein | 10 |
| 202 | Pat | Fay | 11 |
| 204 | Hermann | Baer | 12 |
| 118 | Guy | Himuro | 13 |
...
2) 使用 SQL IN 运算符的子查询示例
子查询 是嵌套在另一个查询中的查询。我们来看一个示例

以下查询返回 Marketing
和 Sales
部门的部门 ID
SELECT
department_id
FROM
departments
WHERE
department_name = 'Marketing'
OR department_name = 'Sales'
Code language: SQL (Structured Query Language) (sql)
+---------------+
| department_id |
+---------------+
| 2 |
| 8 |
+---------------+
查询返回两个部门 ID 的列表。
然后,你可以将 ID 列表传递给 IN
运算符来查找在 Marketing
和 Sales
部门工作的员工,如下所示
SELECT
employee_id,
first_name,
last_name,
department_id
FROM
employees
WHERE
department_id IN (2, 8);
Code language: SQL (Structured Query Language) (sql)
+-------------+------------+------------+---------------+
| employee_id | first_name | last_name | department_id |
+-------------+------------+------------+---------------+
| 145 | John | Russell | 8 |
| 146 | Karen | Partners | 8 |
| 176 | Jonathon | Taylor | 8 |
| 177 | Jack | Livingston | 8 |
| 178 | Kimberely | Grant | 8 |
| 179 | Charles | Johnson | 8 |
| 201 | Michael | Hartstein | 2 |
| 202 | Pat | Fay | 2 |
+-------------+------------+------------+---------------+
若要将上述两个查询合并成一个查询,你可以将第一个查询用在括号中,然后跟随 IN 运算符
SELECT
employee_id, first_name, last_name, salary
FROM
employees
WHERE
department_id IN (SELECT
department_id
FROM
departments
WHERE
department_name = 'Marketing'
OR department_name = 'Sales')
Code language: SQL (Structured Query Language) (sql)
概要
- 使用 SQL
IN
运算符来检查值是否在值集中。 - 使用
NOT
运算符否定IN
运算符,即NOT IN
。 - 将 `IN` 与子查询结合使用,可以将两个查询合并成一个查询。
本教程是否有用?