SQL In運算符

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

SQL IN運算符簡介

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

以下是IN運算符的語法:

expression IN (value1,value2,...)

IN運算符通常用於SELECT,UPDATE或DELETE語句的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;

執行上面示例代碼,得到以下結果 -

SQL In運算符

要查找工作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);

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

SQL In運算符

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

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運算符來測試值是否在值列表或子查詢中的條件。