SQL IN

概要: このチュートリアルでは、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 演算子の機能を説明します。

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

次のクエリは、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 つのクエリに結合します。
このチュートリアルは役に立ちましたか?