【SQL入門】IN句の使い方やサブクエリの活用方法を解説

  • 2024.01.30
       
【SQL】IN句の使い方やサブクエリの活用方法を解説

SQL における IN句の活用方法は大きく分けると次の 2つに分類できます。

  • 複数の条件指定をまとめる手法
  • サブクエリを指定する手法

本記事では SQL の IN句について基礎から応用的なものまで解説します。

あなたのご希望に沿った案件が必ず見つかります
【フリーランス向け】高収入好待遇の案件をご紹介

TECH MANIA フリーランス

≫まずは簡単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演算子で抽出する範囲を指定する
     

Programmingカテゴリの最新記事