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

MySQLで複数の列のいずれかが特定の値と一致する行を選択する方法

MySQLでは、複数の列のうちどれか一つでも特定の値と一致する行を抽出したい場合、OR条件を組み合わせることで実現できます。この記事では、サンプルテーブルを作成しながら、具体的なクエリの書き方をわかりやすく解説します。

1. サンプルテーブルの作成

まず、検索対象となるテーブルを作成しましょう。以下のようにCREATE TABLE文を実行します。

mysql> create table DemoTable
   (
   Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   FirstName varchar(10),
   LastName varchar(10),
   Age int,
   CountryName varchar(10)
   );
Query OK, 0 rows affected (0.58 sec)

2. テストデータの挿入

続いて、INSERT文を使ってレコードを登録します。

mysql> insert into DemoTable(FirstName,LastName,Age,CountryName)
values('John','Smith',21,'US');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(FirstName,LastName,Age,CountryName)
values('Carol','Taylor',22,'AUS');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(FirstName,LastName,Age,CountryName)
values('David','Miller',19,'UK');
Query OK, 1 row affected (0.16 sec)

3. 登録したレコードの確認

SELECT文ですべてのデータを表示して、正しく登録されているか確認しましょう。

mysql> select *from DemoTable;

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

+----+-----------+----------+------+-------------+
| Id | FirstName | LastName | Age  | CountryName |
+----+-----------+----------+------+-------------+
| 1  | John      | Smith    | 21   | US          |
| 2  | Carol     | Taylor   | 22   | AUS         |
| 3  | David     | Miller   | 19   | UK          |
+----+-----------+----------+------+-------------+
3 rows in set (0.00 sec)

4. OR条件を使って複数の列を検索する

それが本題です。複数の列のうち、どれか一つでも指定した値と一致する行を取得するには、WHERE句の中で各条件をORでつなぎます。

以下の例では、「FirstNameが'Carol'」または「Ageが22」または「CountryNameが'AUS'」のいずれかに該当する行を抽出しています。

mysql> select *from DemoTable where FirstName="Carol" OR Age=22 OR CountryName="AUS";

実行すると、3つの条件のいずれかに一致する次の1行が返されます。

+----+-----------+----------+------+-------------+
| Id | FirstName | LastName | Age  | CountryName |
+----+-----------+----------+------+-------------+
| 2  | Carol     | Taylor   | 22   | AUS         |
+----+-----------+----------+------+-------------+
1 row in set (0.00 sec)

このように、Id=2の「Carol Taylor」はFirstName・Age・CountryNameのすべての条件に該当しているため、たった1つのOR条件だけでもヒットします。

補足:IN句を使った別の書き方

同じ列に対して複数の候補値を比較したい場合は、ORを並べる代わりにIN句を使うと、クエリがすっきりと読みやすくなります。

mysql> select *from DemoTable WHERE CountryName IN ('US', 'UK');

なお、異なる列同士を比較する今回のようなケースではOR条件が基本となりますが、条件数が多くなる場合は可読性やインデックスの利用状況を考慮して、クエリの設計を見直すことをおすすめします。

まとめ

複数の列のいずれかが特定の値と一致する行を取得したいときは、WHERE句でOR条件を組み合わせるのが最もシンプルな方法です。実務でも頻繁に使われるテクニックなので、ぜひマスターしておきましょう。

  1. MySQLのWHERE句で日付の差を計算して行を抽出する方法(TIMESTAMPDIFFの使い方)

    MySQLでは、TIMESTAMPDIFF() 関数を使うことで、日時同士の差分を計算し、その結果に基づいてWHERE句で行を絞り込むことができます。ここでは、指定した日時との差が5分以内のレコードを抽出する例を紹介します。サンプルテーブルの作成まず、datetime型のカラムを持つテーブルを作成しましょう。mysql> create table demo42 -> ( -> start_date datetime -> ); Query OK, 0 rows affected (0.77 sec)テーブルへのデータ挿入次に、INSERT文を使っていくつかの日時データを

  2. MySQLでLIMIT句を使ってページネーション(次の行)を取得する方法

    MySQLでページネーション(特定の範囲の行だけを取得すること)を実現したい場合は、LIMIT句を使用します。LIMIT句では「開始位置(オフセット)」と「取得する行数」を指定できるため、大量のデータの中から必要な部分だけを効率よく取り出せます。この記事では、実際にテーブルを作成し、データを挿入したうえで、次の行を取得するページネーションの具体的な手順を解説します。1. サンプルテーブルを作成するまずはデモ用のテーブルを作成しましょう。以下のSQLでは、自動採番されるidカラムと名前を格納するnameカラムを持つテーブル「demo40」を定義しています。mysql> create tab