SQLのLIKE演算子は、特定の文字列パターンに一致するデータを検索する際に使用されます。この検索パターンを指定するために、ワイルドカードと呼ばれる特別な記号が使われます。主なワイルドカードは、%(パーセント)と_(アンダースコア)の2種類です。
1. ワイルドカードの種類とその動作
| ワイルドカード | 記号の意味 | 動作 |
|---|---|---|
| % (パーセント) | ゼロ文字以上の任意の文字列 | 任意の長さ(0文字、1文字、またはそれ以上)の文字列にマッチします。 |
| _ (アンダースコア) | 任意の1文字 | 正確に1文字分の文字列にマッチします。 |
2. 代表的な検索パターンと%の使い方
%は、LIKE検索で最も頻繁に使用されるワイルドカードです。配置する場所によって、前方一致、後方一致、中間一致といった異なる検索を実行できます。
| 検索パターン | 構文例 | 動作 | 例: 'Apple', 'Pineapple', 'Apples' から検索 |
|---|---|---|---|
| 前方一致 (Prefix Search) | LIKE 'A%' | 指定した文字列で始まるデータ | 'Apple', 'Apples' にマッチ |
| 後方一致 (Suffix Search) | LIKE '%e' | 指定した文字列で終わるデータ | 'Apple', 'Pineapple' にマッチ |
| 中間一致 (Substring Search) | LIKE '%p%e%' | 指定した文字列を含むデータ | 'Apple', 'Pineapple' にマッチ |
🚨 前方一致・中間一致の注意点
特にパフォーマンスに影響を与える可能性があるため、以下の点に注意が必要です。
-
前方一致 (
LIKE 'A%') の利点:-
ほとんどのデータベースシステムでは、前方一致のパターン(
LIKE 'A%'のようにワイルドカードが末尾にある場合)は、対象のカラムにインデックスが設定されていれば、それを利用できます。 -
これにより、検索速度が非常に高速になり、大量のデータからの検索に適しています。
-
-
中間一致や後方一致 (
LIKE '%e'やLIKE '%p%') の問題点:-
パターンがワイルドカードで始まる場合(例:
'%e'、'%p%')、データベースは通常、インデックスを利用できません。 -
この場合、テーブルのすべての行をスキャンするフルスキャンが必要となり、データ量が増えると検索パフォーマンスが大幅に低下します。
-
3. _ (アンダースコア) の使い方
_は、文字数や位置を厳密に指定したい場合に役立ちます。
| パターン | 構文例 | 動作 | 例: 'Data', 'Date', 'Dare', 'Daily' から検索 |
|---|---|---|---|
| 厳密な文字位置指定 | LIKE 'Da_e' | 'D'で始まり、その次に任意の1文字、その次に'e'で終わる4文字の文字列 | 'Date', 'Dare' にマッチ |
| 特定の長さの検索 | LIKE '_____' | 正確に5文字の文字列のみを検索 | 5文字の単語にのみマッチ |
4. エスケープ処理 (ワイルドカード自体を検索する場合)
データにワイルドカード文字(% や _)そのものが含まれており、それを文字として検索したい場合は、エスケープ文字を使って特別な意味を無効化する必要があります。
-
構文:
LIKE 'パターン' ESCAPE 'エスケープ文字' -
例: データベースに格納されている
'100%割引'という文字列を検索したい場合、%を文字として扱う必要があります。SQL
1234<span class="hljs-keyword">SELECT</span> <span class="hljs-operator">*</span><span class="hljs-keyword">FROM</span> Products<span class="hljs-keyword">WHERE</span> Description <span class="hljs-keyword">LIKE</span> <span class="hljs-string">'100\#%'</span> <span class="hljs-keyword">ESCAPE</span> <span class="hljs-string">'\#'</span>;(例では、
\#をエスケープ文字として定義し、その直後の%をワイルドカードではなく通常の文字として扱っています。)
SQLのLIKE検索は非常に便利ですが、特に%の使用位置がデータベースのパフォーマンスに大きく影響することを理解し、前方一致を基本とする設計を心がけることが重要です。
