MySQLでLIKEとORを組み合わせて使う方法|IN演算子との違いも解説
MySQLでは、LIKE演算子とOR演算子を組み合わせて使用できます。この書き方は、IN演算子を使った場合と同じ結果が得られます。それぞれの構文を詳しく見ていきましょう。
基本構文
ケース1:LIKEとOR演算子を組み合わせる
SELECT * FROM テーブル名
WHERE カラム名 LIKE '値1'
OR カラム名 LIKE '値2'
OR カラム名 LIKE '値3';
ケース2:IN演算子を使う
SELECT * FROM テーブル名
WHERE カラム名 IN ('値1', '値2', '値3');
それでは、両方の構文を実際に確認してみましょう。まずはサンプル用のテーブルを作成します。
サンプルテーブルの作成
mysql> CREATE TABLE LikeDemo (
-> Id VARCHAR(20)
-> );
Query OK, 0 rows affected (0.58 sec)
次に、INSERT文でレコードを挿入していきます。
mysql> INSERT INTO LikeDemo VALUES('John123');
Query OK, 1 row affected (0.22 sec)
mysql> INSERT INTO LikeDemo VALUES('Smith205');
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO LikeDemo VALUES('Bob999');
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO LikeDemo VALUES('Carol9091');
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO LikeDemo VALUES('Johnson2222');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO LikeDemo VALUES('David2345');
Query OK, 1 row affected (0.21 sec)
SELECT文で全レコードを表示して内容を確認します。
mysql> SELECT * FROM LikeDemo;
実行結果は以下の通りです。
+-------------+ | Id | +-------------+ | John123 | | Smith205 | | Bob999 | | Carol9091 | | Johnson2222 | | David2345 | +-------------+ 6 rows in set (0.00 sec)
ケース1:LIKE+OR演算子での検索
LIKEにOR演算子を組み合わせたクエリは次のように記述します。
mysql> SELECT * FROM LikeDemo
-> WHERE Id LIKE 'John123%'
-> OR Id LIKE 'Carol9091%'
-> OR Id LIKE 'David2345%';
実行結果:
+-----------+ | Id | +-----------+ | John123 | | Carol9091 | | David2345 | +-----------+ 3 rows in set (0.00 sec)
ケース2:IN演算子での検索
同じ条件をIN演算子で記述すると、より簡潔に書けます。
mysql> SELECT * FROM LikeDemo
-> WHERE Id IN ('John123', 'Carol9091', 'David2345');
実行結果:
+-----------+ | Id | +-----------+ | John123 | | Carol9091 | | David2345 | +-----------+ 3 rows in set (0.04 sec)
まとめ:LIKE+ORとINの使い分け
完全一致の複数条件でデータを絞り込むなら、IN演算子の方がシンプルで可読性に優れています。一方、前方一致や部分一致など、ワイルドカード(%)を使った曖昧検索が必要な場合には、LIKE ... OR ...の組み合わせが有効です。条件が増えるとクエリが長くなりやすい点には注意し、目的に応じて適切に使い分けましょう。
-
MySQLのLIKE演算子を使って1つのクエリで複数の値を取得する方法
LIKE演算子で複数の値を取得するにはLIKE演算子を使って複数の値を取得したい場合は、LIKE演算子とOR演算子を組み合わせて使用します。これにより、1つのクエリで複数のパターンに一致するレコードを抽出できます。まずはサンプル用のテーブルを作成しましょう。mysql> create table DemoTable1027 ( Id int, Name varchar(100) ); Query OK, 0 rows affected (1.64 sec)次に、INSERTコマンドを使ってテーブルにレコードを挿入します。mysql> insert into Demo
-
MySQLクエリで「LIKE concat()」を使用することはできる?
はい、MySQLではLIKE句とconcat()関数を組み合わせて使用することが可能です。concat()関数で動的にパターン文字列を生成し、それをLIKE句の検索条件として利用できます。実際にサンプルを使って手順を見ていきましょう。まず、テーブルを作成します。mysql> create table DemoTable ( Name varchar(50) ); Query OK, 0 rows affected (0.63 sec)次に、insertコマンドを使ってテーブルにレコードを挿入します。mysql> insert into DemoTable values(Jo