WHERE句を使って、複数の値のどれかにマッチするものを検索したい時に便利なのがIN演算子です。
本記事では、IN演算子の使い方を具体例を交えて解説しています。また、IN演算子を使わずに複数の値を指定して検索する方法も合わせてお伝えします。
目次
サンプルデータ
具体例を見ていく上で、下記のusersテーブルをサンプルデータとして使用していきます。
id | name | address |
---|---|---|
1 | 山田 | 東京都 |
2 | 鈴木 | 神奈川県 |
3 | 佐藤 | 北海道 |
4 | 大野 | 大阪府 |
5 | 小山 | 京都府 |
6 | 近藤 | 東京都 |
7 | 佐々木 | 千葉県 |
8 | 宮田 | 福岡県 |
IN演算子を使って複数の値を条件指定
IN演算子はシンプルな書き方で、複数の値を指定して検索ができます。一般的にWHERE句と一緒に使われます。
「AとBとCのいずれかに該当するデータを抽出したい」といったようなニーズを満たすことができます。
IN演算子の基本構文は下記です。
SELECT カラム名
FROM テーブル名
WHERE カラム名 IN (値1, 値2, 値3, ...);
INの後に()
を用いて、値をカンマ区切りで指定していきます。値は何個でも指定することができますが、あまりにも多くなる場合はBETWEEN演算子など他の文法を使ってよりシンプルに書く方法がないか再考してみてもいいでしょう。
では、具体例を見ていきましょう。
シンプルなケース
まず、最も一般的な検索方法から見ていきます。
検索クエリ
usersテーブルから居住地が東京都・大阪府・神奈川県のいずれかに該当するレコードを取得する
SELECT *
FROM users
WHERE address IN ('東京都', '大阪府', '神奈川県');
INの後に文字列で東京都・大阪府・神奈川県をカンマ区切りで指定しています。
実行結果
id | name | address |
---|---|---|
1 | 山田 | 東京都 |
2 | 鈴木 | 神奈川県 |
4 | 大野 | 大阪府 |
6 | 近藤 | 東京都 |
居住地が東京都・大阪府・神奈川県に一致するデータを取得することができました。
LIKE演算子を使うケース
次に、LIKE演算子を用いたケースも見てみましょう。検索条件の幅を広げることができます。
検索クエリ
usersテーブルから名前に「山」もしくは「木」が含まれているレコードを取得する
SELECT *
FROM users
WHERE name IN ('%山%', '%木%');
INの中で指定する条件にLIKE演算子を使用しています。
実行結果
id | name | address |
---|---|---|
1 | 山田 | 東京都 |
2 | 鈴木 | 神奈川県 |
5 | 小山 | 京都府 |
7 | 佐々木 | 千葉県 |
名前に「山」もしくは「木」を含むデータを取得することができました。特定の文字や記号が含まれる条件検索をしたい場合はLIKEを使うといいですね。
比較演算子を使って複数の値を条件指定
ここまでINの使い方を見てきましたが、実は比較演算子を使って全く同じ結果を得ることができます。
比較演算子を使って複数の値を検索する場合の基本構文が下記です。
SELECT カラム名
FROM テーブル名
WHERE カラム名 = 値1 OR カラム名 = 値2 OR カラム名 = 値3 ...
OR
を使って永遠とカラム名 = 値
を指定していく形ですね。条件の数が増えるとクエリも長くなっていくため、INを使った方が簡潔に書くことができます。
よって、2つ以上の条件指定をする場合はINを使うことをおすすめします。
検索クエリ
usersテーブルから居住地が東京都・大阪府・神奈川県のいずれかに該当するレコードを取得する
SELECT *
FROM users
WHERE (address = '東京都') OR (address = '大阪府') OR (address = '神奈川県');
先ほどのINを使ったクエリと比べても、長くなっていることが分かります。
得られる結果はINを使った場合と変わりません。
IN演算子の否定形
INの否定形も見てみましょう。INの直前にNOTを付けることで、INで指定した値のいずれも含まないデータを取得することができます。
基本構文が下記になります。
SELECT カラム名
FROM テーブル名
WHERE カラム名 NOT IN (値1, 値2, 値3, ...);
検索クエリ
usersテーブルから居住地が東京都・大阪府・神奈川県のいずれにも該当しないレコードを取得する
SELECT *
FROM users
WHERE address NOT IN ('東京都', '大阪府', '神奈川県');
実行結果
id | name | address |
---|---|---|
3 | 佐藤 | 北海道 |
5 | 小山 | 京都府 |
7 | 佐々木 | 千葉県 |
8 | 宮田 | 福岡県 |
東京都・大阪府・神奈川県のいずれにも該当しないデータを取得することができました。
比較演算子を使った否定形
INではなく、比較演算子を使った否定形のクエリも見ておきましょう。
検索クエリ
usersテーブルから居住地が東京都・大阪府・神奈川県のいずれにも該当しないレコードを取得する
SELECT *
FROM users
WHERE (address != '東京都') OR (address != '大阪府') OR (address != '神奈川県');
!=
を用いてイコールではないという条件式を複数指定しています。否定の場合も、2つ以上の条件を指定する場合はINを使った方がシンプルに書けるのでおすすめです。
内容のまとめ
- IN演算子は複数の値を指定して検索できる
- 一般的にWHERE句とセットで使われる
- LIKE演算子と一緒に使うことで条件検索の幅を広げることができる
- 比較演算子を使って、
カラム名 = 値1 OR カラム名 = 値2 OR カラム名 = 値3 ...
という形で書くこともできるが、INの方がシンプルに書けるのでおすすめ - INの直前にNOTをつけて、
NOT IN (値1, 値2, ...)
とすることで否定形にできる - 比較演算子を用いた否定形は、
カラム名 != 値1 OR カラム名 != 値2 OR カラム名 = 値3 ...
とすることで実現できる