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

MySQLでテーブル内の単語をテキストから検索・抽出する方法

MySQLでは、テーブルに保存されている単語が、任意のテキスト文字列の中に含まれているかどうかを確認し、一致する単語だけを抽出することができます。本記事では、LIKE演算子とCONCAT関数を組み合わせたシンプルな手法を、具体的なサンプルコードとともに解説します。

1. サンプルテーブルを作成する

まず、単語を格納するためのテーブルを作成します。ここでは「Value」というカラムを持つ「DemoTable1316」テーブルを使用します。

mysql> create table DemoTable1316
-> (
-> Value varchar(40)
-> );
Query OK, 0 rows affected (0.47 sec)

2. テストデータを挿入する

INSERT文を使って、いくつかのレコードを登録しましょう。

mysql> insert into DemoTable1316 values('MySQL');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1316 values('Java');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1316 values('MongoDB');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable1316 values('C++');
Query OK, 1 row affected (0.13 sec)

3. 登録したデータを確認する

SELECT文ですべてのレコードを表示して、内容を確認します。

mysql> select *from DemoTable1316;

実行結果は以下の通りです。これらの単語が、後ほどテキスト内から検索・選択する対象となります。

+---------+
| Value   |
+---------+
| MySQL   |
| Java    |
| MongoDB |
| C++     |
+---------+
4 rows in set (0.00 sec)

4. テキストから該当する単語を選択する

それでは本題です。次のテキストから、テーブル内の単語と一致するものを抽出してみましょう。

対象テキスト: 「Deep Dive using Java is good for advanced knowledge, but not MySQL」(Javaを使ったDeep Diveは高度な知識の習得に良いが、MySQLはそうではない)

ポイントは、LIKE演算子CONCAT関数を組み合わせることです。CONCAT関数でワイルドカード「%」を単語の前後に付けることで、「テキストの中にその単語が含まれているか」を部分一致で判定できます。

mysql> select Value
-> from DemoTable1316
-> where ( 'Deep Dive using Java is good for advanced knowledge, but not MySQL') like concat('%',Value,'%');

実行結果

テキスト内に実際に含まれていたのは「MySQL」と「Java」の2つの単語だったため、以下のように該当レコードのみが出力されます。

+-------+
| Value |
+-------+
| MySQL |
| Java  |
+-------+
2 rows in set (0.05 sec)

解説のポイント

  • concat('%', Value, '%'): 単語の前後に「%」を連結することで、「〜単語〜」というパターン(部分一致)を作り出しています。
  • WHERE句での判定: 固定の文字列リテラルに対してLIKEマッチングを行うことで、各レコードのValueがテキスト内に存在するかを1行ずつ評価します。
  • テキスト内に存在しない「MongoDB」「C++」は結果から除外されるため、これが単語のフィルタリングとして機能します。

このテクニックは、キーワード辞書テーブルと文章のマッチングなど、簡易的なテキスト照合処理に活用できます。なお、大量データや日本語のようなマルチバイト文字列を扱う場合は、フルテキストインデックス(FULLTEXT INDEX)や正規表現(REGEXP)の利用も検討するとよいでしょう。

  1. MySQLのSELECTクエリで別テーブルに存在しない行を抽出する方法(NATURAL LEFT JOIN活用)

    MySQLのSELECTクエリで別テーブルに存在しない行を抽出する方法データベースの運用では、「片方のテーブルには存在するが、もう片方のテーブルには存在しないレコード」を抽出したい場面がよくあります。この記事では、2つのテーブルを作成し、NATURAL LEFT JOINを活用して差分の行を取得する方法を、実際のサンプルコードとともにわかりやすく解説します。1. 最初のテーブルを作成するまずは比較元となる最初のテーブルを作成します。 mysql> create table FirstTableDemo -> ( -> id int, -> name v

  2. MySQLでテーブルの最後の10件のレコードを取得する方法

    MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected