MySQLのWHERE句で配列を渡す方法|IN句を使った複数条件の指定テクニック
MySQLのWHERE句で配列を渡すには?
MySQLでは、WHERE句とIN句を組み合わせることで、配列のように複数の値をまとめて条件に指定できます。特定の複数のIDや値に一致するレコードだけを抽出したい場合に非常に便利な方法です。
この記事では、実際にサンプルテーブルを作成しながら、IN句を使った配列渡しの方法を具体的なSQL例とともに解説します。
1. サンプルテーブルの作成
まず、例として使用する新しいテーブルを作成します。
mysql> create table PassingAnArrayDemo
-> (
-> id int,
-> Firstname varchar(100)
-> );
Query OK, 0 rows affected (1.60 sec)
2. レコードの挿入
続いて、テーブルにサンプルデータを挿入します。INSERT文では複数の行を一度に登録できます。
mysql> insert into PassingAnArrayDemo values(1,'John'),(2,'Carol'),(3,'Smith'),(4,'Bob'),(5,'Johnson'),(6,'David'),(7,'Sam'),(8,'Jessica'); Query OK, 8 rows affected (0.32 sec) Records: 8 Duplicates: 0 Warnings: 0
3. 登録した全レコードを表示
すべてのレコードを確認するには、SELECT文を実行します。
mysql> select *from PassingAnArrayDemo;
実行結果は以下の通りです。
+------+-----------+ | id | Firstname | +------+-----------+ | 1 | John | | 2 | Carol | | 3 | Smith | | 4 | Bob | | 5 | Johnson | | 6 | David | | 7 | Sam | | 8 | Jessica | +------+-----------+ 8 rows in set (0.00 sec)
4. WHERE IN句で配列のように複数の値を指定する
IN句を使用すると、WHERE句に配列パラメータを渡すのと同じように、複数の値を一度に指定できます。構文は以下の通りです。
mysql> SELECT *
-> FROM PassingAnArrayDemo where id IN(1,3,6);
このクエリでは、idが「1」「3」「6」のいずれかに一致するレコードのみが抽出されます。実行結果を見てみましょう。
+------+-----------+ | id | Firstname | +------+-----------+ | 1 | John | | 3 | Smith | | 6 | David | +------+-----------+ 3 rows in set (0.04 sec)
まとめ
MySQLのWHERE句で配列を扱いたい場合は、IN句を使うのが基本です。カンマ区切りで複数の値を指定することで、複数のOR条件を簡潔に1つのクエリで表現できます。
なお、PHPやJavaなどのアプリケーションから動的に値のリストを渡す場合は、SQLインジェクションを防ぐために、プレースホルダを使ったプリペアドステートメントと組み合わせることをおすすめします。
-
【MySQL】WHERE句のAND条件を使ってテーブルから特定のレコードを削除する方法
MySQLでWHERE句にAND条件を使って特定のレコードを削除する方法MySQLでは、WHERE句にAND演算子を組み合わせることで、複数の条件をすべて満たすレコードだけを対象に操作できます。本記事では、実際にテーブルを作成し、AND条件を使って特定のレコードを削除するまでの手順を順番に解説します。1. テーブルの作成まず、サンプル用のテーブルを作成します。mysql> create table DemoTable -> ( -> Id int, -> Name varchar(20) -> );Query OK, 0 rows affe
-
MySQLクエリでLIKE句を2回使う方法|OR条件で複数パターンを検索する
MySQLでは、LIKE句を1つのクエリ内で2回以上使用することで、複数のパターンに一致するレコードを柔軟に抽出できます。この記事では、実際にテーブルを作成し、LIKE句を2回組み合わせた検索クエリの書き方を手順を追って解説します。 1. サンプルテーブルを作成する まず、検索対象となるテーブルを作成します。 mysql> create table DemoTable2009 ( Name varchar(20) ); Query OK, 0 rows affected (0.51 sec) 2. テーブルにレコードを挿入する INSERT文を使って、いくつかの名前データを登録し