SQL IN

概述:本教程将介绍如何使用 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 语句的 INNOT IN 运算符,以选择具有值集中的值的那些行。此外,你还会在 子查询 中使用 IN 运算符。

SQL IN 示例

我们将使用 示例数据库 中的 employees 表来演示 IN 运算符的功能。

employees_table

以下示例使用 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 运算符的子查询示例

子查询 是嵌套在另一个查询中的查询。我们来看一个示例

Employees & Departments Tables

以下查询返回 MarketingSales 部门的部门 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 运算符来查找在 MarketingSales 部门工作的员工,如下所示

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` 与子查询结合使用,可以将两个查询合并成一个查询。
本教程是否有用?