MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで「WHERE 変数 = 複数の候補のいずれか」を実現する方法:IN句の使い方

はじめに

MySQLで特定のカラムが複数の候補値のいずれかに一致するレコードを取得したい場合、IN()句を使用します。等価演算子(=)を複数回組み合わせてOR条件を書くよりも、コードが簡潔になり、可読性も大幅に向上します。

この記事では、実際にテーブルを作成し、データを挿入してから、IN句を使った検索クエリの実行方法を順を追って解説します。

サンプルテーブルの作成

まず、デモ用のテーブルを作成しましょう。以下のコマンドでDemoTable1624というテーブルを作成します。

mysql> create table DemoTable1624
    -> (
    -> ClientId int,
    -> ClientName varchar(20)
    -> );
Query OK, 0 rows affected (0.39 sec)

テーブルにはClientId(整数型)とClientName(可変長文字列型)の2つのカラムを定義しています。

テストデータの挿入

次に、INSERT文を使ってテーブルにいくつかのレコードを挿入します。

mysql> insert into DemoTable1624 values(101,'Chris Brown');
Query OK, 1 row affected (0.27 sec)
mysql> insert into DemoTable1624 values(102,'David Miller');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1624 values(103,'John Smith');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1624 values(104,'Carol Taylor');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1624 values(105,'Adam Smith');
Query OK, 1 row affected (0.19 sec)

これで5件の顧客データが登録されました。

全レコードの確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> select * from DemoTable1624;

実行結果は以下のとおりです。

+----------+--------------+
| ClientId | ClientName   |
+----------+--------------+
|     101 | Chris Brown  |
|     102 | David Miller |
|     103 | John Smith   |
|     104 | Carol Taylor |
|     105 | Adam Smith   |
+----------+--------------+
5 rows in set (0.00 sec)

IN句を使った検索クエリ

ここからが本題です。「ClientIdが101、102、104のいずれかに一致するレコード」を取得するには、以下のようにIN句を使用します。

mysql> select * from DemoTable1624 where ClientId in(101,102,104);

実行すると、指定した3つのIDに該当するレコードのみが返されます。

+----------+--------------+
| ClientId | ClientName   |
+----------+--------------+
|     101 | Chris Brown  |
|     102 | David Miller |
|     104 | Carol Taylor |
+----------+--------------+
3 rows in set (0.00 sec)

まとめ

このように、カラムの値が複数の候補のいずれかに一致する条件で絞り込みたい場合は、WHERE カラム名 IN (値1, 値2, ...) の形式でIN句を使うのが最もシンプルで効率的な方法です。

ちなみに、in(101,102,104)=101 OR ClientId =102 OR ClientId =104と書き換えることも可能ですが、候補値が増えるほどIN句の方が記述量が少なく、パフォーマンス面でも最適化されやすいため、実務ではIN句の使用が推奨されます。

  1. MySQLでWHERE IN句とNULLを組み合わせてレコードを取得する方法

    MySQLでは、WHERE IN句を使った検索時にNULL値を含む行も取得したいケースがあります。しかし、NULLは通常の比較演算子では正しく評価されないため、IS NULLを組み合わせる必要があります。本記事では、その具体的な方法をサンプルコードとともに解説します。基本の構文NULLを含めて検索する場合の基本的な構文は以下のとおりです。ポイントは、IN句の条件に加えて OR カラム名 IS NULL を追加することです。SELECT yourColumnName1, yourColumnName2, yourColumnName3, ... N FROM yourTabl

  2. MySQLでカンマ区切りの文字列から特定の値を検索・選択する方法

    カンマ区切りで保存された文字列の中に、特定の値が含まれているかを確認して行を抽出したい場合があります。そのようなときは、MySQLの FIND_IN_SET() 関数を使用すると便利です。FIND_IN_SET() は、第1引数に検索したい文字列、第2引数にカンマ区切りの文字列を指定し、見つかった位置(1始まり)を返します。見つからない場合は0が返されるため、「0より大きい」という条件と組み合わせることで、該当するレコードだけを取得できます。テーブルの作成まず、サンプル用のテーブルを作成しましょう。mysql> create table demo81 -> ( ->