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

MySQLのWHERE句でOR演算子を使って複数条件に一致する行を取得する方法

MySQLでは、WHERE句の中でOR演算子を組み合わせることで、複数の条件のいずれかに一致するレコードを柔軟に抽出できます。本記事では、実際にテーブルを作成し、ORを使ったクエリの動作を確認していきます。

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

まず、以下のコマンドでテーブルを作成します。

mysql> create table DemoTable777 (
   StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   StudentName varchar(100),
   StudentAge int
);
Query OK, 0 rows affected (1.34 sec)

このテーブルは、学生ID(自動採番の主キー)、学生名、年齢の3つのカラムを持っています。

2. テストデータの挿入

次に、INSERT文を使ってサンプルデータを登録します。

mysql> insert into DemoTable777(StudentName,StudentAge) values('Chris',23);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable777(StudentName,StudentAge) values('Robert',21);
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable777(StudentName,StudentAge) values('Mike',19);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable777(StudentName,StudentAge) values('Bob',22);
Query OK, 1 row affected (0.19 sec)

3. 登録データの確認

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

mysql> select *from DemoTable777;

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

+-----------+-------------+------------+
| StudentId | StudentName | StudentAge |
+-----------+-------------+------------+
| 1         | Chris       | 23         |
| 2         | Robert      | 21         |
| 3         | Mike        | 19         |
| 4         | Bob         | 22         |
+-----------+-------------+------------+
4 rows in set (0.00 sec)

4. WHERE句でORを使用したクエリ

ここが本題です。WHERE句内でIN条件とORを組み合わせることで、「学生IDが1または2」「学生名がMike」「年齢が22」という複数の条件のいずれかに一致するすべてのカラムを取得できます。

mysql> select *from DemoTable777 where StudentId IN(1,2) OR StudentName='Mike' OR StudentAge=22;

実行結果:

+-----------+-------------+------------+
| StudentId | StudentName | StudentAge |
+-----------+-------------+------------+
| 1         | Chris       | 23         |
| 2         | Robert      | 21         |
| 3         | Mike        | 19         |
| 4         | Bob         | 22         |
+-----------+-------------+------------+
4 rows in set (0.00 sec)

解説:なぜ全件ヒットするのか?

今回の例では、各レコードが少なくとも1つの条件に該当するため、4件すべてが結果として返されました。具体的には以下の通りです。

  • Chris(ID:1) … StudentId IN(1,2) に一致
  • Robert(ID:2) … StudentId IN(1,2) に一致
  • Mike(ID:3) … StudentName='Mike' に一致
  • Bob(ID:4) … StudentAge=22 に一致

OR演算子は「いずれかの条件が真であれば」その行を返すため、ANDとは異なり条件が緩くなる点に注意してください。特定の列だけを表示したい場合は、select * の代わりに select StudentId, StudentName のように必要なカラム名を明示的に指定するとよいでしょう。

  1. MySQLでNULL値を除外して残りの値だけを表示する方法

    MySQLでは、IS NOT NULL演算子を使うことで、NULL値を除外し、実際に値が存在するレコードだけを取得・表示できます。本記事では、サンプルテーブルを作成しながら、具体的な手順をわかりやすく解説します。 1. テーブルを作成する まず、学生名とスコアを格納するテーブルを作成します。 mysql> create table DemoTable1458     -> (     -> StudentName varchar(20),     ->

  2. MySQLで列の値と任意のテキストを連結して1つの列に表示する方法

    MySQLで列の値とテキストを連結する方法MySQLでは、CONCAT()関数を使用することで、テーブルの列の値と任意のテキストを連結し、結果を1つの列として表示できます。本記事では、サンプルテーブルを作成し、実際に文字列を連結して表示するまでの手順を具体例とともに解説します。1. テーブルの作成まず、テーブルを作成しましょう。mysql> create table DemoTable -> ( -> Id int, -> Name varchar(20) -> );Query OK, 0 rows affected (0.93 sec)こ