「部分一致」と「中間一致」の違い

データベース

文字列を検索する手法 として、よく使われるものに「完全一致」「部分一致」「前方一致」「後方一致」があります。

その他に「中間一致」という手法がありますが、よく「部分一致」と同一だと思われて、仕様書や設計書に「中間一致」と 誤記 されていることが、大手企業 でも 中小企業 でも、しばしば見かけます。

当エントリーは、まず 文字列の代表的な検索手法を 軽く説明してから「部分一致」と「中間一致」の違いを説明します。

完全一致

文字通り、文字列が検索キーワードと完全に一致することです。

SQL だと

WHERE textdata = 'xxx'

というようにイコールで検索します。

前方一致と後方一致

「前方一致」は文字列が検索キーワードから始まることで、
「後方一致」は文字列が検索キーワードで終わることです。

SQLだと「前方一致」は

WHERE textdata LIKE 'abc%'

というように LIKE 句で検索します。

「後方一致」も

WHERE textdata LIKE '%xyz'

というように LIKE 句で検索します。

部分一致

「部分一致」は、文字列の一部が検索キーワードと一致することを示します。
文字列が「ABCDE」の場合、キーワードが「ABC」「BCD」「CDE」などが部分一致します。
SQL だと

WHERE textdata LIKE '%keyword%'

というように LIKE 句で検索します。

この「部分一致」のことを「中間一致」だと言う人が結構多いですのですが、「部分一致」と「中間一致」は違う意味の言葉です。
某大学のサイト内ですら間違った説明がされています。そちらを信じないようにご注意ください。

中間一致

「中間一致」とは、部分一致のうち、前方一致でも後方一致でもないものです。

つまり、検索対象の文字列が「ABCD」の場合、「B」「BC」「C」のみが「中間一致」する検索キーワードだということです。

逆に言えば、「前方一致」「後方一致」「中間一致」はどれも「部分一致の一部」ということですね。

中間一致は SQL だと (部分一致 AND (NOT 前方一致) AND (NOT 後方一致)) なので、

WHERE textdata LIKE '%xyz%'
AND NOT textdata LIKE 'abc%'
AND NOT textdata LIKE '%xyz'

でしょうかね。
⇒間違ってました。

WHERE textdata LIKE '_%abc%_'

ですね。

使うことはほとんど無いでしょうけれど。

「中間一致」というのは、「検索方法」というより「検索時の事象」に近いように思います。

パターン表

下表にパターンをまとめてみましたので、よければご参考にどうぞ。

表. 検索文字列が「ABCD」の場合の一致パターン
検索キーワード 前方一致 中間一致 後方一致 部分一致 完全一致
A o x x o x
B x o x o x
C x o x o x
D x x o o x
AB o x x o x
BC x o x o x
CD x x o o x
ABC o x x o x
BCD x x o o x
ABCD o x o o o

おしまい。

多少 間違っていても 意図を汲んで 上手く処理してくれる人は たくさんいますが、いつも そんな方ばかりでは ありませんので、言葉は なるべく 正しく使うようにしたいと思っています。

以上、最後まで お読みいただき、ありがとうございます。

お役に立てたなら幸いです。

コメント

  1. […] 「部分一致」と「中間一致」の違い 完全一致・前方一致・後方一致 […]