受講料が最大70%OFF 受講料が最大70%OFF

SQLを記述する際、たびたびWHERE句の中で複数条件を指定したいケースが訪れます。

そんな時に利用出来るのが今回ご紹介する「IN」句です。

本記事では、MySQL環境を使用して「IN」句の基本的な使い方をサンプルコードを交えながらご紹介していきたいと思います。

MySQLのIN句について基本的な使い方を理解しよう

MySQLでも利用可能なIN句についてまずは基本的な使い方をご紹介していきたいと思います。

IN句を使ってWHERE句に複数条件を指定しよう

IN句の使い方はWHERE句で指定したカラムに対し、複数の値の中から一致するデータを抽出します。

下記はIN句を利用したSQLの基本構文です。

SELECT カラム名, [カラム名] FROM テーブル名 WHERE カラム名 IN (値, 値, ...)

サンプルSQLはOR演算子を使っても記述することが可能です。

SELECT カラム名, [カラム名] FROM テーブル名 WHERE カラム名 = 値 OR カラム名 = 値 OR .... 

WHERE句でOR演算子を使う場合、指定する値が多くなるほどSQLが長く読みにくくなりますので、IN句を用いて複数の値を指定する方法がおすすめです。

サンプルSQLでIN句の使い方を確認しよう

上記の説明を実際にテーブルから値を取得するサンプルSQLで確認してみましょう。

サンプル用のテーブルとして「sample_user」というテーブルを用意しました。

格納されているデータは下記の通りとなります。

+------+---------------+
| id   | name          |
+------+---------------+
|    1 | ポテパン1      |
|    2 | ポテパン2      |
|    3 | ポテパン3      |
+------+---------------+

では、実際にIN句を使用してデータを取得してみます。

今回はidが「1」と「3」のデータを取得したいと思います。

select * from sample_user where id in (1, 3);

サンプルSQLを実行した結果が下記の通りとなります。

+------+---------------+
| id   | name          |
+------+---------------+
|    1 | ポテパン1      |
|    3 | ポテパン3      |
+------+---------------+

指定した値と一致するデータが抽出されていることがご確認頂けます。

IN句を使用したサンプルSQLをOR演算子を使って書き換えてみよう

次にサンプルSQLをOR演算子を使って書き換えてみたいと思います。

サンプルSQLでは指定している値が2つだけのため、大きな負担にはなりませんが指定する値が増えるほどSQLも長くなり煩雑で読みにくいSQLになってしまうため注意が必要です。

select * from sample_user where id = 1 OR id = 3;

MySQLのIN句でサブクエリを使ってみよう


IN句は複数の値をリスト形式で条件として設定可能なため、SELECT句で取得した複数の値を条件として指定することも可能です。

IN句でサブクエリを利用する際の基本構文

IN句にサブクエリで取得した値を設定する際の基本構文は、FROM句でサブクエリを使用する場合とほとんど同じです。

SELECT カラム名, [カラム名] FROM テーブル名 WHERE カラム名 IN (SELECT カラム名 FROM テーブル名 [WHERE ...])

注意すべき点としてサブクエリのSELECT句で取得するカラムは1つに限定する必要があります。

ポテパンダの一言メモ

「*」を利用して複数カラムを取得することも出来ないため注意が必要です。

サンプルSQLでサブクエリを利用したIN句の処理内容を確認しよう

今回のサンプルでは上記で利用していた「sample_user」に加えて「sample_order」というテーブルを使用します。

テーブルに格納されているデータは下記の通りとなります。

+----------+--------------+---------------------+---------+
| order_id | product_name | order_date          | user_id |
+----------+--------------+---------------------+---------+
|        1 | ラーメン       | 2020-01-15 13:08:41 |       1 |
|        2 | カレー         | 2020-01-15 13:09:26 |       1 |
|        3 | 寿司          | 2020-01-15 13:09:45 |       2 |
|        4 | ラーメン       | 2020-01-15 13:10:33 |       4 |
+----------+--------------+---------------------+---------+

では実際にサンプルSQLを作成してみましょう。

今回は「ラーメン」を注文したお客さんの中で「sample_user」テーブルに登録されているユーザーを抽出するSQLを作成しました。

select * from sample_user where id in (select user_id from sample_order where product_name = 'ラーメン');

実行した結果が下記の通りとなります。

+------+---------------+
| id   | name          |
+------+---------------+
|    1 | ポテパン1      |
+------+---------------+

サブクエリでは「ラーメン」を注文したお客さんとして「user_id」が「1」と「4」のデータが取得出来ますが、メインクエリのテーブル「sample_user」には「id=4」のデータは存在しないため、結果として「id=1」のデータのみが表示されていることがご確認頂けます。

MySQLでもNOT IN句は利用可能


IN句とセットで説明されるNOT IN句についても触れておきたいと思います。

IN句ではカラムに指定した複数の値の「いずれかが一致する」データを抽出していました。

反対にNOT IN句ではカラムに指定した複数の値の「いずれも一致しない」データが抽出されます。

NOT IN句の基本構文を確認しよう

NOT IN句の基本構文はIN句と全く同じで取得する内容が正反対のデータとなります。

SELECT カラム名, [カラム名] FROM テーブル名 WHERE カラム名 NOT IN (値, 値, ...)

WHERE句のカラムに指定した「値」が存在しないデータのみが抽出されます。

サンプルSQLでNOT IN句の使い方を確認しよう

では実際にIN句のサンプルSQLをNOT IN句に記述し直して実行してみたいと思います。

select * from sample_user where id not in (1, 3);

実行した結果が下記の通りとなります。

+------+---------------+
| id   | name          |
+------+---------------+
|    2 | ポテパン2      |
+------+---------------+

NOT IN句で指定した値以外のデータが抽出されていることがご確認頂けます。

さいごに:MySQL以外でも利用できるIN句の使い方をきちんと理解しておこう

本記事ではMySQL環境でのサンプルSQLを交えてIN句の使い方をご紹介してきました。

IN句はSQL構文としてMySQL以外のデータベースでも利用することが可能です。

IN句を利用することでSQL文をコンパクトで読みやすく記述することが可能となりますので、積極的に活用してみてください。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。