MySQLクエリでOR条件とAND条件を組み合わせて使う方法
MySQLでは、ORとANDの条件を組み合わせることで、より柔軟なデータ抽出が可能になります。本記事では、実際にテーブルを作成し、OR条件とAND条件を組み合わせたSELECT文の使い方を具体例とともに解説します。
1. テーブルの作成
まず、サンプル用のテーブルを作成します。
mysql> create table DemoTable
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name varchar(20),
-> Age int
-> );
Query OK, 0 rows affected (0.63 sec)
このテーブルは、自動採番される「Id」、名前を格納する「Name」、年齢を格納する「Age」の3つのカラムを持っています。
2. レコードの挿入
次に、INSERT文を使ってテーブルにいくつかのレコードを挿入します。意図的にNULL値を含むデータも入れておきます。
mysql> insert into DemoTable(Name,Age) values('John',21);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(Name,Age) values(Null,20);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(Name,Age) values('David',23);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(Name,Age) values('Carol',null);
Query OK, 1 row affected (0.17 sec)
3. 登録されたデータの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
出力結果
+----+-------+------+ | Id | Name | Age | +----+-------+------+ | 1 | John | 21 | | 2 | NULL | 20 | | 3 | David | 23 | | 4 | Carol | NULL | +----+-------+------+ 4 rows in set (0.00 sec)
4件のレコードが登録されていることが確認できます。Id=2のレコードはNameがNULL、Id=4のレコードはAgeがNULLになっています。
4. OR条件とAND条件を組み合わせたクエリ
ここからが本題です。「Nameが'David'であるレコード」または「NameがNULLかつAgeが20であるレコード」を抽出する場合、以下のようにOR条件の中にAND条件を括弧で囲んで記述します。
mysql> select *from DemoTable
-> where Name='David' OR (Name is null AND Age=20);
出力結果
+----+-------+------+ | Id | Name | Age | +----+-------+------+ | 2 | NULL | 20 | | 3 | David | 23 | +----+-------+------+ 2 rows in set (0.00 sec)
結果として、「David」という名前のレコード(Id=3)と、「NameがNULLでAgeが20」のレコード(Id=2)の2件が抽出されました。
ポイント解説
- 括弧の重要性: SQLではAND条件がOR条件よりも優先して評価されます。そのため、複数条件を組み合わせる場合は括弧を使って評価順序を明示的に指定するのが安全です。
- NULL値の扱い: NULL値を判定する際は「= null」ではなく「IS NULL」を使用します。「Name = null」と書いても正しく動作しないので注意が必要です。
- 可読性: 条件が複雑になるほど、インデントや括弧を適切に使うことで、後から見ても理解しやすいクエリになります。
このように、OR条件とAND条件を適切に組み合わせることで、単純な一致検索だけでは実現できない柔軟なデータ抽出が可能になります。業務システムでの複雑な検索処理にも応用できる基本テクニックなので、ぜひマスターしておきましょう。
-
MySQLでSELECTクエリを使用してデータを挿入(INSERT)する方法
MySQLでは、INSERT文とSELECTクエリを組み合わせることで、テーブルにデータを挿入することができます。通常、SELECTは既存のテーブルからデータを取得するために使われますが、値を直接指定してINSERTを実行する際にも活用できる便利な手法です。基本構文SELECTクエリを使用してINSERTを実行する場合の構文は以下の通りです。insert into yourTableName(yourColumnName1,yourColumnName2,yourColumnName3,...N) select yourValue1,yourValue2,yourValue3,......N;
-
MySQLで名前のMD5ハッシュ値を使って全エントリを一括更新するクエリの書き方
MySQLでは、MD5()関数を使うことで、文字列から簡単にMD5ハッシュ値を生成できます。ここでは、パスワードが格納されたカラムの値をMD5化し、別のカラムへ一括で更新する手順を、実際のSQL例とともにわかりやすく解説します。 1. サンプルテーブルを作成する まず、元のパスワードを保存する「Password」カラムと、ハッシュ値を保存する「HashPassword」カラムを持つテーブルを作成します。 mysql> create table DemoTable1887 ( Password