MySQLクエリでLIKE句を2回使う方法|OR条件で複数パターンを検索する
MySQLでは、LIKE句を1つのクエリ内で2回以上使用することで、複数のパターンに一致するレコードを柔軟に抽出できます。この記事では、実際にテーブルを作成し、LIKE句を2回組み合わせた検索クエリの書き方を手順を追って解説します。
1. サンプルテーブルを作成する
まず、検索対象となるテーブルを作成します。
mysql> create table DemoTable2009
(
Name varchar(20)
);
Query OK, 0 rows affected (0.51 sec)
2. テーブルにレコードを挿入する
INSERT文を使って、いくつかの名前データを登録します。
mysql> insert into DemoTable2009 values('John Doe');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable2009 values('Adam Smith');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable2009 values('John Smith');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable2009 values('David Miller');
Query OK, 1 row affected (0.18 sec)
3. 登録したレコードを確認する
SELECT文ですべてのレコードを表示してみましょう。
mysql> select * from DemoTable2009;
実行結果は以下のとおりです。
+--------------+ | Name | +--------------+ | John Doe | | Adam Smith | | John Smith | | David Miller | +--------------+ 4 rows in set (0.00 sec)
4. LIKE句を2回使用した検索クエリ
ここが本題です。WHERE句の中でLIKE句をOR条件で2回記述すると、「Smithを含む」または「Davidを含む」という2つのパターンに一致するレコードを一度に取得できます。
mysql> select * from DemoTable2009
where Name like '%Smith%'
or Name like '%David%';
実行結果は以下のとおりです。
+--------------+ | Name | +--------------+ | Adam Smith | | John Smith | | David Miller | +--------------+ 3 rows in set (0.00 sec)
ポイント解説
- %(ワイルドカード):任意の文字列に一致します。「%Smith%」は「Smith」を含むすべての文字列にマッチします。
- OR条件:LIKE句を複数回使う場合は、OR演算子でつなぐことで「いずれかのパターンに一致」するレコードを抽出できます。
- AND条件との違い:ANDを使うと両方のパターンに同時に一致する必要があるため、目的に応じて使い分けましょう。
このように、LIKE句を複数回組み合わせることで、単一のクエリでも柔軟な部分一致検索が可能になります。より多くの条件が必要な場合も、同様にOR(またはAND)でLIKE句をつなぎ続けるだけで対応できます。
-
MySQLでAND演算子とOR演算子を組み合わせたSELECTクエリの使い方
MySQLでは、WHERE句の中でAND演算子とOR演算子を組み合わせることで、複数の条件に基づいた柔軟なデータ抽出が可能になります。この記事では、実際にテーブルを作成し、ANDとORを組み合わせたSELECTクエリの実行方法を手順を追って解説します。1. サンプルテーブルの作成まず、CREATE TABLE文を使用してテーブルを作成します。mysql> create table DemoTable ( StudentId int, StudentName varchar(20), StudentSubject varchar(20) ); Query OK, 0
-
MySQLでLIKEをIN()のように実装するクエリの書き方
MySQLのIN()のような動作を実現するには、LIKE演算子と組み合わせてCOUNT()関数やIF()関数を使用します。この記事では、具体的な手順をサンプルコード付きで解説します。テーブルの作成まず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable -> ( -> Subject varchar(80) -> );Query OK, 0 rows affected (0.58 sec)