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

MySQLでLIKEをIN()のように実装するクエリの書き方

MySQLのIN()のような動作を実現するには、LIKE演算子と組み合わせてCOUNT()関数やIF()関数を使用します。この記事では、具体的な手順をサンプルコード付きで解説します。

テーブルの作成

まず、サンプル用のテーブルを作成しましょう。

mysql> create table DemoTable
    -> (
    -> Subject varchar(80)
    -> );
Query OK, 0 rows affected (0.58 sec)

レコードの挿入

次に、INSERT文を使ってテーブルにいくつかのレコードを挿入します。

mysql> insert into DemoTable values('MySQLMongoDB');
Query OK, 1 row affected (0.86 sec)
mysql> insert into DemoTable values('MySQL');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('JavaMySQL');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('MongoDB');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values('Java');
Query OK, 1 row affected (0.19 sec)

登録データの確認

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

mysql> select *from DemoTable;

上記のクエリを実行すると、次のような結果が出力されます。

+--------------+
| Subject     |
+--------------+
| MySQLMongoDB |
| MySQL       |
| JavaMySQL   |
| MongoDB     |
| Java        |
+--------------+
5 rows in set (0.00 sec)

LIKEをIN()のように使うクエリ

ここが本題です。LIKEIN()のように実装するには、以下のようにCOUNT()IF()を組み合わせたクエリを記述します。各キーワードに部分一致するレコードの件数を一度に集計できます。

mysql> select
    -> count(if(Subject like '%MySQL%',1,NULL)) as MySQLCount,
    -> count(if(Subject like '%Java%',1,NULL)) as JavaCount,
    -> count(if(Subject like '%MongoDB%',1,NULL)) as MongoDBCount
    -> from DemoTable;

このクエリを実行すると、次のような出力が得られます。

+------------+-----------+--------------+
| MySQLCount | JavaCount | MongoDBCount |
+------------+-----------+--------------+
|         3 |        2 |           2 |
+------------+-----------+--------------+
1 row in set (0.00 sec)

解説

このクエリのポイントは、IF(条件, 1, NULL)によって条件に一致した場合のみ「1」を返し、一致しない場合はNULLを返すところにあります。COUNT()はNULLをカウントしないため、結果として各キーワードに部分一致したレコード数だけを取得できるのです。

上記の出力を見ると、「MySQL」を含むレコードは3件(MySQLMongoDB、MySQL、JavaMySQL)、「Java」を含むレコードは2件(JavaMySQL、Java)、「MongoDB」を含むレコードは2件(MySQLMongoDB、MongoDB)であることがわかります。このように、複数のパターンマッチ条件を1つのクエリで効率的に集計したい場合に非常に便利なテクニックです。

  1. 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文を使って、いくつかの名前データを登録し

  2. 動的配列を活用したMySQLのLIKEクエリ実装方法を解説

    動的配列に対するLIKEクエリの基本構文 MySQLでカンマ区切りの複数値(いわゆる動的な配列)が格納されたカラムに対してLIKEクエリを実行したい場合、LIKE句とワイルドカード「%」を組み合わせることで部分一致検索が可能です。基本となる構文は以下の通りです。 select *from yourTableName     where yourColumnName2 like %yourValue%     order by yourColumnName1 asc     l