MySQLで1つのクエリを使って列の値から複数の単語を検索する方法
MySQLで1つのカラムに対して複数のキーワードをまとめて検索したい場合、WHERE句に複数のLIKE演算子を組み合わせることで実現できます。OR条件で連結することにより、いずれかの単語を含むレコードをすべて抽出可能です。
この記事では、テーブル作成から実際の検索クエリの実行まで、具体的な手順を順番に解説します。
1. サンプルテーブルを作成する
まず、文章を保存するためのテーブルを作成しましょう。SentenceというTEXT型のカラムを1つだけ持つシンプルな構造です。
mysql> create table DemoTable1536
-> (
-> Sentence text
-> );
Query OK, 0 rows affected (0.51 sec)
2. テストデータを挿入する
続いて、INSERT文を使っていくつかのレコードを登録します。
mysql> insert into DemoTable1536 values('I like MySQL database.');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1536 values('Java is an Object Oriented Programming Language');
Query OK, 1 row affected (0.30 sec)
mysql> insert into DemoTable1536 values('I only like data structure');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable1536 values('MongoDB is NoSQL database');
Query OK, 1 row affected (0.46 sec)3. 登録したデータを確認する
SELECT文ですべてのレコードを表示してみましょう。
mysql> select * from DemoTable1536;
以下のような出力が得られます。
+--------------------------------------------------+
| Sentence |
+--------------------------------------------------+
| I like MySQL database. |
| Java is an Object Oriented Programming Language |
| I only like data structure |
| MongoDB is NoSQL database |
+--------------------------------------------------+
4 rows in set (0.00 sec)
4. 複数の単語を検索するクエリを実行する
ここが本題です。「like」「database」「data」という3つの単語のうち、どれかを含む行を1つのクエリで取得してみます。ポイントは、各LIKE条件をORで連結し、全体を括弧で囲むことです。
mysql> select * from DemoTable1536
-> where ( Sentence like '%like%') or (Sentence like '%database%') or (Sentence like '%data%');
5. 実行結果
上記のクエリを実行すると、以下のように3件のレコードが返されます。いずれも指定したキーワードのうち少なくとも1つを含んでいることが確認できます。
+----------------------------+
| Sentence |
+----------------------------+
| I like MySQL database. |
| I only like data structure |
| MongoDB is NoSQL database |
+----------------------------+
3 rows in set (0.00 sec)
補足:AND条件との違い
ORではなくANDで連結すると、「すべてのキーワードを含む」レコードのみが抽出されます。用途に応じて使い分けるとよいでしょう。
- OR条件:いずれか1つでも一致すればヒット(部分一致検索に便利)
- AND条件:すべての条件を満たす行のみヒット(絞り込み検索に便利)
このように、WHERE句とLIKE演算子を組み合わせるだけで、特別な全文検索エンジンを使わずとも柔軟なキーワード検索が実装できます。ぜひ実際の開発でも活用してみてください。
-
【MySQL】SUM()関数を使って単一クエリで特定の列値ごとの複数カウントを取得する方法
特定の列値に基づくカウントを1つのMySQLクエリで複数取得するには、集計関数SUM()を活用します。MySQLでは「列 = 値」という条件式が真なら1、偽なら0を返すため、その結果をSUM()で合計することで、条件に一致する行数を数えられます。まずはサンプル用のテーブルを作成しましょう。 mysql> create table DemoTable1790 ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Name varchar(20), Score int ); Query OK, 0 rows af
-
MySQLで1つのINSERT文を使って列に複数の値を一括挿入する方法
はじめにMySQLでは、1つのINSERT文を繰り返し実行しなくても、単一のクエリだけで同じ列に複数の値を挿入できます。VALUES句の後ろに、挿入したい値をカンマ区切りのタプル(行)として列挙するだけです。この方法はデータベースへの接続回数を減らせるため、大量のデータを登録する際にパフォーマンス面でも大きなメリットがあります。基本構文複数の値を1つの列に挿入する場合の基本構文は以下のとおりです。INSERT INTO テーブル名 VALUES(値1),(値2),...,(値N);このように、各値を丸括弧で囲み、カンマ(,)で区切って並べることで、1回のクエリで複数行をまとめて挿入できます。実