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

MySQLでAND・OR演算子を組み合わせて複数の行レコードを取得する方法

MySQLでは、WHERE句の中でAND演算子OR演算子を組み合わせることで、複数の条件に一致する行レコードを柔軟に抽出できます。この記事では、実際にテーブルを作成し、サンプルデータを挿入したうえで、ANDとORを組み合わせたクエリの使い方を具体的に解説します。

1. サンプルテーブルを作成する

まず、学生情報を管理するテーブルを作成します。数学科とMySQL科目の点数、そしてステータス(ACTIVE/INACTIVE)を持つ構成です。

mysql> create table DemoTable
(
    StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentName varchar(40),
    StudentMathMarks int,
    StudentMySQLMarks int,
    status ENUM('ACTIVE','INACTIVE')
);
Query OK, 0 rows affected (0.47 sec)

2. サンプルデータを挿入する

INSERT文を使って、4件の学生レコードを登録します。

mysql> insert into DemoTable(StudentName,StudentMathMarks,StudentMySQLMarks,status) values('Chris',45,67,'active');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable(StudentName,StudentMathMarks,StudentMySQLMarks,status) values('Bob',89,78,'inactive');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable(StudentName,StudentMathMarks,StudentMySQLMarks,status) values('David',56,68,'active');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable(StudentName,StudentMathMarks,StudentMySQLMarks,status) values('Robert',68,75,'active');
Query OK, 1 row affected (0.18 sec)

3. 登録されたデータを確認する

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

mysql> select *from DemoTable;

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

+-----------+-------------+------------------+-------------------+----------+
| StudentId | StudentName | StudentMathMarks | StudentMySQLMarks | status   |
+-----------+-------------+------------------+-------------------+----------+
|         1 | Chris       |               45 |                67 | ACTIVE   |
|         2 | Bob         |               89 |                78 | INACTIVE |
|         3 | David       |               56 |                68 | ACTIVE   |
|         4 | Robert      |               68 |                75 | ACTIVE   |
+-----------+-------------+------------------+-------------------+----------+
4 rows in set (0.00 sec)

4. AND・OR演算子を組み合わせたクエリを実行する

ここが本題です。次のクエリでは、「ステータスがACTIVEであること(AND条件)」かつ「数学の点数が68点、またはMySQLの点数が67点であること(OR条件)」に一致する行を取得しています。

mysql> select *from DemoTable
    where status='active'
and (StudentMathMarks=68 or StudentMySQLMarks=67);

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

+-----------+-------------+------------------+-------------------+--------+
| StudentId | StudentName | StudentMathMarks | StudentMySQLMarks | status |
+-----------+-------------+------------------+-------------------+--------+
|         1 | Chris       |               45 |                67 | ACTIVE |
|         4 | Robert      |               68 |                75 | ACTIVE |
+-----------+-------------+------------------+-------------------+--------+
2 rows in set (0.00 sec)

結果のポイント

出力を見ると、Chris(MySQLの点数が67)とRobert(数学の点数が68)の2件だけが抽出されました。INACTIVEステータスのBobや、どちらの条件にも当てはまらないDavidは除外されています。

重要なポイント: OR条件部分を括弧 () で囲んでいる点に注目してください。SQLではANDの方がORよりも優先順位が高いため、括弧を付けないと意図しない条件評価(status='active' AND StudentMathMarks=68、または StudentMySQLMarks=67 のみ)になってしまいます。括弧を使って条件を明確にグループ化することで、「ACTIVEステータスかつ(数学68点またはMySQL67点)」という正しい論理式になります。

このように、ANDとORを適切に組み合わせれば、単一の条件では実現できない複雑なデータ抽出を簡単に行えます。業務システムでの絞り込み検索などでも頻繁に使われるテクニックなので、ぜひマスターしておきましょう。

  1. MySQLで複数のレコードをすばやく一括挿入するクエリの書き方

    MySQLで複数のレコードを効率よく挿入したい場合、INSERT文を何度も実行するのではなく、1つのINSERT文で複数行をまとめて指定するのがおすすめです。この方法ならデータベースとの通信回数が減り、処理速度が大幅に向上します。 基本構文 複数のレコードをすばやく挿入するには、単一のINSERT文を使い、以下の構文に従います。 insert into yourTableName values(yourValue1,yourValue2,...N),(yourValue1,yourValue2,...N).....N; ポイントは、各行の値セットをカンマ(,)で区切って並べるだけというシンプル

  2. MySQLでAND・OR演算子を組み合わせた単一クエリを使って特定のレコードを取得する方法

    MySQLでは、AND演算子とOR演算子をWHERE句で組み合わせることで、複数の条件を指定しながら特定のレコードを1つのクエリで取得できます。本記事では、実際にテーブルを作成し、データを挿入して、AND・ORを組み合わせたクエリの動作を確認していきます。 1. テーブルの作成 まず、CREATE TABLE文でサンプル用のテーブルを作成します。 mysql> create table DemoTable2015 -> ( -> StudentId int, -> StudentName varchar(20), -> Stude