データベースを運用する上で、膨大なデータの中から特定のキーワードを含むレコードを検索する作業は非常に頻繁に発生します。
顧客名や商品名、あるいはログデータの中から特定の文字列を探し出す際に、SQLのLIKE演算子は欠かせない存在です。
LIKE演算子を使いこなすことで、単純な完全一致検索だけでなく、前方一致や後方一致、部分一致といった柔軟な条件指定が可能になります。
本記事では、SQLで特定の文字を含むデータを抽出するための基本的な手法から、2026年のシステム開発でも役立つ実践的なテクニックまでを詳しく紹介します。
LIKE演算子の基本構造と使い方
SQLで文字列のパターンマッチングを行うには、WHERE句においてLIKE演算子を使用します。
基本的な構文は、SELECT カラム名 FROM テーブル名 WHERE カラム名 LIKE 'パターン'という形になります。
このとき、検索条件となるパターンの中にワイルドカードと呼ばれる特別な記号を組み合わせて使用します。
SQLにおいて利用される主なワイルドカードは、以下の2種類です。
| 記号 | 意味 | 使用例 |
|---|---|---|
| % (パーセント) | 0文字以上の任意の文字列 | ‘データ%’、’%データ%’ |
| _ (アンダースコア) | 任意の1文字 | ‘第_世代’ |
これらの記号をどこに配置するかによって、検索の挙動が大きく変わります。
% (パーセント) を使った柔軟な検索
%は、長さがゼロを含む任意の文字列に一致するため、最も汎用性が高いワイルドカードです。
例えば、ある列の中に特定のワードが含まれているかどうかを調べたい場合に重宝します。
以下は、商品名に「スマートフォン」という文字列が含まれるデータを抽出する例です。
-- 商品名に「スマートフォン」を含むレコードを抽出する
SELECT *
FROM products
WHERE product_name LIKE '%スマートフォン%';
id | product_name
---+---------------------------
1 | 最新スマートフォン A100
2 | スマートフォン用ケース
3 | 中古スマートフォン
このように、前後に%を付けることで、文字列のどの位置にあってもヒットする部分一致検索が実現できます。
_ (アンダースコア) を使った文字数指定検索
_は、厳密に「任意の1文字」を意味します。
特定の文字数で構成されるデータを抽出したい場合や、一部の文字だけが異なるパターンを探す場合に有効です。
例えば、4文字のIDのうち、3文字目だけが「A」であるデータを検索する場合は以下のようになります。
-- 3文字目に 'A' が来る4文字のコードを検索
SELECT *
FROM codes
WHERE code_id LIKE '__A_';
code_id
-------
XYA1
BBA9
ZZA2
_を2つ並べれば2文字、3つ並べれば3文字を表すため、文字数を固定した精度の高い検索が可能です。
実践的なパターンマッチングのバリエーション
実際の業務では、検索の目的に応じて「前方一致」「後方一致」「部分一致」を使い分けることが求められます。
それぞれのパターンを正しく理解することで、データベースの負荷を抑えつつ目的のデータを効率的に抽出できます。
前方一致検索
文字列が特定のワードで始まるデータを抽出するのが前方一致検索です。
パターンの末尾にのみ%を記述します。
-- 「株式会社」で始まる取引先名を抽出
SELECT *
FROM companies
WHERE company_name LIKE '株式会社%';
前方一致検索は、後述するインデックスの恩恵を受けやすいため、大量のデータを扱う際にも高速に動作する傾向があります。
後方一致検索
文字列が特定のワードで終わるデータを抽出するのが後方一致検索です。
パターンの先頭にのみ%を記述します。
-- メールのドメインが「example.com」で終わるユーザーを抽出
SELECT *
FROM users
WHERE email LIKE '%example.com';
部分一致検索
位置を問わず、指定した文字列が含まれていれば抽出するのが部分一致検索です。
パターンの前後を%で囲みます。
-- 住所のどこかに「東京都」が含まれるデータを抽出
SELECT *
FROM addresses
WHERE address_text LIKE '%東京都%';
非常に便利な検索方法ですが、検索対象のデータ量が多い場合には処理が重くなる可能性がある点に注意が必要です。
特殊な文字を検索するための「ESCAPE」句
検索したい文字列自体に%や_が含まれている場合、そのまま記述するとワイルドカードとして解釈されてしまいます。
例えば、「利益率10%」という文字列を探したい場合、LIKE '%10%%'と書くと正しく動作しません。
このようなケースでは、ESCAPE句を使用して、特殊文字をリテラルとして扱うように指示します。
-- 「10%」という文字列が含まれるデータを検索(!をエスケープ文字に指定)
SELECT *
FROM reports
WHERE report_content LIKE '%10!%%' ESCAPE '!';
上記の例では、!の直後にある%はワイルドカードではなく、単なる文字の「%」として扱われます。
エスケープ文字には任意の文字を指定できますが、一般的には ! や $、あるいは \ (バックスラッシュ) がよく使われます。
大文字・小文字の区別とデータベースごとの違い
SQLで文字列を検索する際、大文字と小文字を区別するかどうかは、使用しているデータベース製品(RDBMS)や設定によって異なります。
例えば、MySQLやSQL Serverではデフォルトで区別しない設定(ケース・インセンシティブ)になっていることが多いです。
一方で、PostgreSQLやOracleではデフォルトで厳密に区別される(ケース・センシティブ)のが一般的です。
PostgreSQLで大文字小文字を区別せずに検索したい場合は、LIKEの代わりにILIKE演算子を使用します。
-- PostgreSQLで大文字小文字を無視して検索
SELECT *
FROM products
WHERE product_code ILIKE 'abc%';
標準SQLではUPPER関数やLOWER関数を使用して、比較対象をすべて大文字または小文字に変換して比較する方法も広く使われています。
-- 関数を使って大文字小文字を無視した検索を行う例
SELECT *
FROM products
WHERE LOWER(product_code) LIKE 'abc%';
「特定の文字を含まない」データの抽出
特定の文字列が含まれるデータを抽出するのとは逆に、特定のパターンに一致しないデータを取得したい場合は、NOT LIKEを使用します。
これは、不要なデータを除外してリストを絞り込む際に非常に便利です。
-- 「テスト」という単語が含まれないタイトルのみを抽出
SELECT title
FROM articles
WHERE title NOT LIKE '%テスト%';
NOT LIKEを使用する際も、LIKEと同様にワイルドカードやESCAPE句を組み合わせて利用することが可能です。
パフォーマンスに関する注意点と高速化のコツ
LIKE演算子、特に%を先頭に配置した検索(部分一致や後方一致)は、データベースのパフォーマンスに大きな影響を与えることがあります。
多くのデータベースにおいて、標準的なB-treeインデックスは「前方一致」でしか機能しないためです。
LIKE '%keyword'のように先頭にワイルドカードを置くと、データベースはインデックスを使わずにテーブル内の全レコードを一行ずつチェックする「フルスキャン」を実行します。
数百万件規模のデータを扱う環境でフルスキャンが発生すると、レスポンスが劇的に低下する恐れがあります。
大規模なデータに対して高速な全文検索を行いたい場合は、各データベースが提供している「全文検索インデックス (Full-Text Search)」の利用を検討してください。
また、検索対象の文字列を正規化しておくことや、検索頻度が高いキーワードを別のカラムに切り出しておくといった工夫も、2026年現在のモダンなシステム設計では一般的です。
正規表現を用いたより複雑なパターンマッチング
LIKE演算子だけでは表現できない複雑な条件(例:数字のみで構成される、あるいは特定の記号の後に英字が続くなど)が必要な場合もあります。
その場合、多くのRDBMSでは正規表現(Regular Expression)をサポートする関数や演算子が用意されています。
例えば、MySQLやGoogle BigQuery、SnowflakeなどではREGEXPやREGEXP_CONTAINSといった関数が利用可能です。
-- MySQLで正規表現を使用して「数字で始まる商品名」を検索
SELECT product_name
FROM products
WHERE product_name REGEXP '^[0-9]';
正規表現は非常に強力ですが、LIKEよりも処理コストが高くなる傾向があるため、まずはLIKEで実現可能かどうかを検討するのがベストプラクティスです。
まとめ
SQLで特定の文字を含むデータを抽出するための基本は、LIKE演算子と2種類のワイルドカード(%と_)の組み合わせにあります。
前方一致、後方一致、部分一致の特性を理解し、状況に応じて使い分けることがデータ抽出の第一歩です。
また、特殊文字を検索するためのESCAPE句や、大文字小文字の扱い、NOT LIKEによる除外検索など、応用テクニックを覚えることでより高度なデータ操作が可能になります。
一方で、大量のデータを扱う際には、特に部分一致検索によるパフォーマンス低下に注意を払う必要があります。
適切なインデックス設計や全文検索機能の活用を視野に入れつつ、正確かつ効率的なSQLクエリを作成できるよう心がけましょう。
今回紹介した基礎知識を活用し、日々のデータ抽出や分析作業をよりスムーズに進めていただければ幸いです。
