概要: このチュートリアルでは、SQL IN
演算子を使用して、値が値のセットに含まれているかどうかを確認する方法を学習します。
SQL IN 演算子の概要
IN
は、SQL の論理演算子です。 IN
演算子は、値が値のセットに含まれている場合は true を返し、そうでない場合は false を返します。
以下は、IN
演算子の構文を示しています
expression IN (value1,value2,...)
Code language: SQL (Structured Query Language) (sql)
技術的には、IN 演算子を =
演算子と OR
演算子で置き換えることができます。IN
演算子を使用する条件は、1 つ以上の 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)
NOT IN
演算子は、式
がリスト内のどの値とも等しくない場合は true を返し、そうでない場合は false を返します。
IN 演算子を置き換えるには、!=
演算子と AND
演算子を次のように使用できます。
expression != value1 AND expression != value2 AND...
Code language: SQL (Structured Query Language) (sql)
リスト (value1,value2,...)
内のいずれかの値が null の場合、IN
演算子は行を返しません。
実際には、IN
演算子と NOT IN
演算子は、SELECT
ステートメントの WHERE
句でよく使用され、値のセットに含まれる値を持つ行を選択します。また、IN
演算子はサブクエリでも使用されます。
SQL IN の例
サンプルデータベースの employees
テーブルを使用して、IN
演算子の機能を説明します。

次の例では、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 演算子の例
サブクエリとは、別のクエリの中にネストされたクエリです。例を見てみましょう。

次のクエリは、Marketing
部門と Sales
部門の部門 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 |
+---------------+
このクエリは、2 つの部門 ID のリストを返します。
そして、この ID リストを IN
演算子に渡して、Marketing
部門と Sales
部門で働く従業員を次のように検索できます。
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 |
+-------------+------------+------------+---------------+
上記の 2 つのクエリを 1 つのクエリに結合するには、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` を使用して、2 つのクエリを 1 つのクエリに結合します。