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 運算子。換句話說,您可以使用一個或多個 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,...) 中的任何值為 NULLIN 運算子將不返回任何行。

在實踐中,您通常在 SELECT 語句的 WHERE 子句中使用 INNOT IN 運算子,以篩選出其值在一組值中的行。

稍後,您將學習如何將 INNOT IN 運算子與子查詢一起使用。

SQL IN 運算子示例 #

我們將使用示例資料庫中的 employees 表來演示 IN 運算子的功能。

employees_table

對數值資料使用 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 不是 789 的員工:

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 運算子檢索名字為 StevenLexDaniel 的員工:

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-171994-08-161997-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 運算子取反。

資料庫 #

測驗 #

本教程是否有幫助?
© .