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

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演算子が適しています。用途に応じて使い分けるとよいでしょう。

  1. MySQLでグループごとの最小値を複数取得するクエリの書き方

    MySQLで「名前ごとなど、グループ単位の最小値」を一度に取得したい場面はよくあります。そんなときは、サブクエリとMIN()関数を組み合わせることで簡単に実現できます。この記事では、各人物の最も低いスコアを抽出する具体的手順を、テーブル作成から順に解説します。 サンプルテーブルの作成 まず、CREATE TABLE文でテスト用のテーブルを作成します。 mysql> create table DemoTable     -> (     -> Name varchar(20),  &nbs

  2. MySQLでSELECTクエリを使用してデータを挿入(INSERT)する方法

    MySQLでは、INSERT文とSELECTクエリを組み合わせることで、テーブルにデータを挿入することができます。通常、SELECTは既存のテーブルからデータを取得するために使われますが、値を直接指定してINSERTを実行する際にも活用できる便利な手法です。基本構文SELECTクエリを使用してINSERTを実行する場合の構文は以下の通りです。insert into yourTableName(yourColumnName1,yourColumnName2,yourColumnName3,...N) select yourValue1,yourValue2,yourValue3,......N;