MySQLで複数の値を抽出する方法|OR演算子とIN演算子の使い分け
MySQLで特定のカラムに対して複数の値に一致するレコードを抽出したい場合、WHERE句とOR演算子、またはIN演算子を組み合わせて使用します。
基本的な構文
ケース1:OR演算子を使う方法
SELECT * FROM テーブル名
WHERE カラム名 = 値1 OR カラム名 = 値2 OR カラム名 = 値3, ...N;
ケース2:IN演算子を使う方法
SELECT * FROM テーブル名
WHERE カラム名 IN (値1, 値2, ...N);
IN演算子を使うと、条件をカンマ区切りでまとめて記述できるため、ORを何度も書くよりもSQL文が簡潔になり、可読性も向上します。
サンプルテーブルの作成
実際に動作を確認するために、まずテーブルを作成します。以下がテーブル作成用のクエリです。
mysql> CREATE TABLE selectMultipleValues
-> (
-> BookId int,
-> BookName varchar(200)
-> );
Query OK, 0 rows affected (1.68 sec)
レコードの挿入
次に、INSERTコマンドを使ってテーブルにデータを登録します。
mysql> INSERT INTO selectMultipleValues VALUES(100,'Introduction to C');
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO selectMultipleValues VALUES(101,'Introduction to C++');
Query OK, 1 row affected (0.19 sec)
mysql> INSERT INTO selectMultipleValues VALUES(103,'Introduction to java');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO selectMultipleValues VALUES(104,'Introduction to Python');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO selectMultipleValues VALUES(105,'Introduction to C#');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO selectMultipleValues VALUES(106,'C in Depth');
Query OK, 1 row affected (0.15 sec)
登録データの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> SELECT * FROM selectMultipleValues;
実行結果は以下の通りです。
+--------+------------------------+
| BookId | BookName |
+--------+------------------------+
| 100 | Introduction to C |
| 101 | Introduction to C++ |
| 103 | Introduction to java |
| 104 | Introduction to Python |
| 105 | Introduction to C# |
| 106 | C in Depth |
+--------+------------------------+
6 rows in set (0.00 sec)
ケース1:OR演算子で複数の値を抽出する
OR演算子を使用して、BookIdが「104」または「106」のレコードを抽出するクエリは以下の通りです。
mysql> SELECT * FROM selectMultipleValues
WHERE BookId = 104 OR BookId = 106;
実行結果:
+--------+------------------------+
| BookId | BookName |
+--------+------------------------+
| 104 | Introduction to Python |
| 106 | C in Depth |
+--------+------------------------+
2 rows in set (0.00 sec)
ケース2:IN演算子で複数の値を抽出する
同じ結果をIN演算子を使って取得するクエリは以下の通りです。
mysql> SELECT * FROM selectMultipleValues
WHERE BookId IN (104, 106);
実行結果:
+--------+------------------------+
| BookId | BookName |
+--------+------------------------+
| 104 | Introduction to Python |
| 106 | C in Depth |
+--------+------------------------+
2 rows in set (0.00 sec)
ORとINのどちらを使うべきか
どちらの方法でも同じ結果が得られますが、一般的にはIN演算子が推奨されます。理由は以下の通りです。
- 条件が増えても記述が簡潔で、SQL文が読みやすくなる
- 条件の追加・削除がカンマ区切りだけで済み、メンテナンス性が高い
- 多くの場合、データベースエンジンが最適化しやすい形になる
一方、条件ごとに異なるカラムを比較したい場合などはOR演算子が適しています。用途に応じて使い分けるとよいでしょう。
-
MySQLでグループごとの最小値を複数取得するクエリの書き方
MySQLで「名前ごとなど、グループ単位の最小値」を一度に取得したい場面はよくあります。そんなときは、サブクエリとMIN()関数を組み合わせることで簡単に実現できます。この記事では、各人物の最も低いスコアを抽出する具体的手順を、テーブル作成から順に解説します。 サンプルテーブルの作成 まず、CREATE TABLE文でテスト用のテーブルを作成します。 mysql> create table DemoTable -> ( -> Name varchar(20), &nbs
-
MySQLでSELECTクエリを使用してデータを挿入(INSERT)する方法
MySQLでは、INSERT文とSELECTクエリを組み合わせることで、テーブルにデータを挿入することができます。通常、SELECTは既存のテーブルからデータを取得するために使われますが、値を直接指定してINSERTを実行する際にも活用できる便利な手法です。基本構文SELECTクエリを使用してINSERTを実行する場合の構文は以下の通りです。insert into yourTableName(yourColumnName1,yourColumnName2,yourColumnName3,...N) select yourValue1,yourValue2,yourValue3,......N;