在本教學中,您將學習如何使用SQL IN
運算子將列中的值與一組值進行比較。
IN
運算子是一個邏輯運算子,用於將值與一組值進行比較。 如果值在值集內,則IN
運算子返回true
。 否則,它返回false
或unknown
。
以下是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...
請注意,如果列表中的任何值(value1
,value2
,...
)為null
,則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
,9
或10
的所有員工,請使用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
,9
或10
的所有員工,請使用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
運算子來測試值是否在值列表或子查詢中的條件。