摘要:在本教程中,您將學習如何使用 SQL IN 運算子來檢查一個值是否存在於一組值中。
SQL IN 運算子簡介 #
IN 是 SQL 中的邏輯運算子之一。如果一個值存在於一組值中,IN 運算子返回 true,否則返回 false。
以下是 IN 運算子的語法:
expression IN (value1, value2,...)Code language: SQL (Structured Query Language) (sql)從技術上講,您可以用等於(=)和 OR 運算子來替代 IN 運算子。換句話說,您可以使用一個或多個 OR 運算子來重寫 IN 運算子,如下所示:
expression = value1 OR expression = value2 OR ...Code language: SQL (Structured Query Language) (sql)NOT IN 運算子對 IN 運算子的結果取反。以下是 NOT IN 運算子的語法:
expression NOT IN (value1, value2,...)Code language: SQL (Structured Query Language) (sql)如果 expression 不等於列表 (value1, value2, …) 中的任何值,NOT IN 運算子返回 true,否則返回 false。
從技術上講,您可以使用不等於(!=)和 AND 運算子來重寫 NOT IN 運算子,如下所示:
expression != value1 AND expression != value2 AND...Code language: SQL (Structured Query Language) (sql)請注意,如果列表 (value1,value2,...) 中的任何值為 NULL,IN 運算子將不返回任何行。
在實踐中,您通常在 SELECT 語句的 WHERE 子句中使用 IN 和 NOT IN 運算子,以篩選出其值在一組值中的行。
稍後,您將學習如何將 IN 和 NOT IN 運算子與子查詢一起使用。
SQL IN 運算子示例 #
我們將使用示例資料庫中的 employees 表來演示 IN 運算子的功能。

對數值資料使用 IN 運算子 #
以下示例使用 IN 運算子查詢職位 ID 為 8、9 或 10 的員工:
SELECT
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) first_name | last_name | job_id
------------+-----------+--------
Susan | Mavris | 8
Bruce | Ernst | 9
David | Austin | 9
Alexander | Hunold | 9
Diana | Lorentz | 9
Valli | Pataballa | 9
Michael | Hartstein | 10Code language: SQL (Structured Query Language) (sql)以下示例使用 NOT IN 運算子查詢職位 ID 不是 7、8 或 9 的員工:
SELECT
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) first_name | last_name | job_id
-------------+-------------+--------
William | Gietz | 1
Shelley | Higgins | 2
Jennifer | Whalen | 3
Steven | King | 4
Neena | Kochhar | 5
Lex | De Haan | 5
Jose Manuel | Urman | 6
Luis | Popp | 6
John | Chen | 6
Ismael | Sciarra | 6
Daniel | Faviet | 6
Michael | Hartstein | 10
...Code language: SQL (Structured Query Language) (sql)對字元資料使用 IN 運算子 #
以下查詢使用 IN 運算子檢索名字為 Steven、Lex 或 Daniel 的員工:
SELECT
first_name,
last_name
FROM
employees
WHERE
first_name IN ('Steven', 'Lex', 'Daniel');Code language: SQL (Structured Query Language) (sql)輸出
first_name | last_name
------------+-----------
Steven | King
Lex | De Haan
Daniel | FavietCode language: SQL (Structured Query Language) (sql)對日期值使用 IN 運算子 #
以下語句使用 IN 運算子檢索在 1987-06-17、1994-08-16 和 1997-09-30 這些日期之一入職的員工:
SELECT
first_name,
last_name,
hire_date
FROM
employees
WHERE
hire_date IN ('1987-06-17', '1994-08-16', '1997-09-30');Code language: SQL (Structured Query Language) (sql)輸出
first_name | last_name | hire_date
------------+-----------+------------
Steven | King | 1987-06-17
Daniel | Faviet | 1994-08-16
Ismael | Sciarra | 1997-09-30Code language: SQL (Structured Query Language) (sql)結合函式使用 IN 運算子 #
以下查詢使用 EXTRACT 函式從 hire_date 列中提取月份,並使用 IN 運算子檢索在一月、二月或三月入職的員工:
SELECT
first_name,
last_name,
hire_date,
EXTRACT(MONTH FROM hire_date) joined_month
FROM
employees
WHERE
EXTRACT(MONTH FROM hire_date) IN (1, 2, 3)
ORDER BY
joined_month;Code language: SQL (Structured Query Language) (sql) first_name | last_name | hire_date | joined_month
-------------+-----------+------------+--------------
Lex | De Haan | 1993-01-13 | 1
Alexander | Hunold | 1990-01-03 | 1
Karen | Partners | 1997-01-05 | 1
Charles | Johnson | 2000-01-04 | 1
Michael | Hartstein | 1996-02-17 | 2
Sarah | Bell | 1996-02-04 | 2
Valli | Pataballa | 1998-02-05 | 2
Diana | Lorentz | 1999-02-07 | 2
Britney | Everett | 1997-03-03 | 3
Jonathon | Taylor | 1998-03-24 | 3
Jose Manuel | Urman | 1998-03-07 | 3Code language: SQL (Structured Query Language) (sql)摘要 #
- 使用
IN運算子檢查一個值是否存在於一組值中。 - 使用
NOT運算子對IN運算子取反。