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 子句中使用 INNOT IN 運算子,在 SELECT 陳述式中選取具有一組值的列。此外,您也會在子查詢中使用 IN 運算子。

SQL IN 範例

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

employees_table

以下範例使用 IN 運算子來尋找職位 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 運算子來尋找職位 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` 和子查詢將兩個查詢合併為單一查詢。
本教學對您有幫助嗎?