SQL における IN句の活用方法は大きく分けると次の 2つに分類できます。
- 複数の条件指定をまとめる手法
- サブクエリを指定する手法
本記事では SQL の IN句について基礎から応用的なものまで解説します。
≫まずは簡単60秒で無料お問い合わせから≪
IN句とは
IN句は、複数の条件指定をまとめて行う場合に用いる命令です。
SQL の SELECT で IN句を用いることで、指定した複数の値と一致するデータを抽出できます。
たとえば、従業員テーブル (employees) のうち、名前が「たくや」か「たいち」の要素を取得するといったことも簡単に行えます。
実際のコードで比較してみましょう。
employeesテーブル
employees_no | birth_date | first_name | last_name | gender | hire_date |
998 | 1990-07-30 | Takuya | Satou | M | 2021-04-01 |
999 | 1995-12-24 | Rin | Suzuki | F | 2019-10-05 |
1000 | 1988-06-06 | Kenta | Takahashi | M | 2019-07-20 |
1001 | 1997-03-08 | Mei | Tanaka | F | 2022-05-27 |
1002 | 1983-11-11 | Taichi | Itou | M | 2006-02-12 |
【 IN句を使用しない場合】
SELECT * FROM employees WHERE first_name = "Takuya" OR name = "Taichi";
これで問題ありませんが、値が増えるほど、冗長化してしまいます。
ここで、複数の値を指定する際に、一つにまとめるために使うのが IN句です。
【 IN句を使用した場合】
SELECT * FROM employees WHERE first_name IN("Takuya "," Taichi ");
列名を何度も書く必要がなくなりこのようにIN句を用いることで複数の条件指定を短縮でき、コードの可読性も上がるため便利です。
実行結果
employees_no | birth_date | first_name | last_name | gender | hire_date |
998 | 1990-07-30 | Takuya | Satou | M | 2021-04-01 |
1002 | 1983-11-11 | Taichi | Itou | M | 2006-02-12 |
上記のように、記述量を減らすことができます。この例では微々たる差に感じるかもしれませんが、「”たくや”,”たいち”,”たくみ”,”たけし”…」と探す要素が多いほど、大きな力を発揮します。
IN句の使い方
前項のサンプルコードでなんとなく理解できたという人もいると思いますが、使い方は以下のようになります。
SELECT * FROM employees WHERE first_name IN("Takuya "," Taichi ");
前半はSELECT文で、IN句はWHERE内で用いられています。
SELECT * FROM [テーブル名] WHERE [カラム名] IN([値1,値2,値3…]);
このように、IN句は対象の要素名の後ろにつければいいので、簡単です。
逆の場合はNOT IN句
IN句とは逆に該当しない要素を調べるには NOT IN句を使用します。
SELECT * FROM employees WHERE first_name NOT IN("Takuya "," Taichi ");
上記では、従業員のうち、名前が「たくや」と「たいち」に該当しないレコードをすべて抽出できます。
ただ、レコード数が多い場合は処理が重くなってしまうので注意が必要です。
IN句の応用的な使い方
先ほど、IN句でカラムに格納された値を指定できるといいましたが、ほかにも、入れ子形式でサブクエリを指定することもできます。
この場合、IN句内の SELECT文の実行後、外側の SELECT文で実行されます。
例を交えて説明します。prefテーブルの「place」要素リストの値が userテーブルの「address」要素リストに一致すれば userテーブルからそのデータを抽出します。
userテーブル
employees_no | birth_date | first_name | last_name | gender | address |
0001 | 1990-07-30 | Yudai | Satou | M | Aichi |
0002 | 1995-12-24 | Rika | Suzuki | F | Tokyo |
0003 | 1988-06-06 | Ken | Takahashi | M | Fukuoka |
0004 | 1997-03-08 | Mai | Tanaka | F | Shizuoka |
0005 | 1983-11-11 | Kouta | Itou | M | Kyoto |
prefテーブル
pref_no | place |
01 | Kanagawa |
02 | Tokyo |
03 | Saitama |
04 | Chiba |
SELECT FROM user WHERE address IN(SELECT place FROM pref);
実行結果
employees_no | birth_date | first_name | last_name | gender | address |
0002 | 1995-12-24 | Rika | Suzuki | F | Tokyo |
サブクエリとは、SELECTで抽出したデータに SELECT や UPDATE を使用する手法で、活用する人が多い手法で、次のような形式で記述します。
SELECT * FROM [テーブルA]
WHERE
[要素名] IN (
SELECT [要素名] FROM [テーブルB]
);
IN句の中に SELECT文を入れることにより、SELECT文の結果を IN句で使用しています。
このように、テーブルBの検索結果をもとにテーブルAで SELECT文が使用できます。
▼ WHERE句で検索条件を指定する方法について知りたい方はこちら
【SQL入門1】WHEREで検索条件を指定する方法を解説
▼ BETWEEN句の使い方について知りたい方はこちら
【SQL入門3】between演算子で抽出する範囲を指定する
- 2022.09.30
- Programming
Author:鷺坂りな @TechMania編集部 投稿一覧
Programmingカテゴリの最新記事
-
- 2023.09.22
- programming,
【ESlint入門】Prettierとの併用でコード品質を向上させる
-
- 2023.09.08
【SQL入門】JOINでテーブル結合!種類と使い方を解説
-
- 2023.09.06
【SQL】ORDER BYのソートの基本、複数条件の並び替えについて解説
-
- 2023.08.08
- 開発,
ゲーム開発におすすめのプログラミング言語【10選】比較表
-
- 2023.05.19
【JSON入門】メリット、基本フォーマット、書き方を解説
-
- 2023.05.12
PHPフレームワークおすすめ9選|入門者向けに【徹底比較】