SQL In運算子


在本教學中,您將學習如何使用SQL IN運算子將列中的值與一組值進行比較。

SQL IN運算子簡介

IN運算子是一個邏輯運算子,用於將值與一組值進行比較。 如果值在值集內,則IN運算子返回true。 否則,它返回falseunknown

以下是IN運算子的語法:

expression IN (value1,value2,...)

IN運算子通常用於SELECTUPDATEDELETE語句的WHERE子句中。 它也廣泛用於子查詢中。

使用IN運算子的條件可以使用一個或多個OR運算子重寫,如下所示:

expression = value1 OR expression = value2 OR ...

要否定IN運算子的結果,請使用NOT運算子:

expression NOT IN (value1, value2,...)

如果表示式與列表中的任何值都不匹配,則NOT IN運算子返回true,否則返回false

同樣,可以使用AND運算子重寫NOT IN運算子,如下所示:

expression != value1 AND expression != value2 AND...

請注意,如果列表中的任何值(value1value2...)為null,則IN運算子不返回任何行。

1. SQL IN範例

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

mysql> DESC employees;
+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| employee_id   | int(11)      | NO   | PRI | NULL    | auto_increment |
| first_name    | varchar(20)  | YES  |     | NULL    |                |
| last_name     | varchar(25)  | NO   |     | NULL    |                |
| email         | varchar(100) | NO   |     | NULL    |                |
| phone_number  | varchar(20)  | YES  |     | NULL    |                |
| hire_date     | date         | NO   |     | NULL    |                |
| job_id        | int(11)      | NO   | MUL | NULL    |                |
| salary        | decimal(8,2) | NO   |     | NULL    |                |
| manager_id    | int(11)      | YES  | MUL | NULL    |                |
| department_id | int(11)      | YES  | MUL | NULL    |                |
+---------------+--------------+------+-----+---------+----------------+
10 rows in set

要查詢工作ID為8,910的所有員工,請使用IN運算子,如下所示:

SELECT
    employee_id, first_name, last_name, job_id
FROM
    employees
WHERE
    job_id IN (8, 9, 10)
ORDER BY
    job_id;

執行上面範例程式碼,得到以下結果 -

要查詢工作ID不是8,910的所有員工,請使用NOT IN運算子,如下所示:

SELECT
    employee_id, first_name, last_name, job_id
FROM
    employees
WHERE
    job_id NOT IN (8, 9, 10)
ORDER BY
    job_id;

SQL IN帶有子查詢範例

子查詢是巢狀在另一個查詢中的查詢。 以下查詢查詢市場行銷IT部門的部門ID:

SELECT 
    department_id
FROM
    departments
WHERE
    department_name = '市場行銷'
        OR department_name = 'IT';

執行上面範例程式碼,得到以下結果 -

+---------------+
| department_id |
+---------------+
|             2 |
|             6 |
+---------------+
2 rows in set

該查詢返回兩個部門的列表。 可以將此列表提供給IN運算子,以查詢在市場行銷IT部門工作的所有員工。

SELECT
    employee_id, first_name, last_name, salary
FROM
    employees
WHERE
    department_id IN (2, 6);

執行上面查詢語句,得到以下結果 -

要使它更簡單,可以使用在第二個查詢中巢狀第一個查詢的子查詢來實現:

SELECT 
    employee_id, first_name, last_name, salary
FROM
    employees
WHERE
    department_id IN (SELECT 
            department_id
        FROM
            departments
        WHERE
            department_name = '市場行銷'
                OR department_name = 'IT')

在本教學中,您已經學習了如何使用SQL IN運算子來測試值是否在值列表或子查詢中的條件。