データベースから特定のデータを探し出す際、完全に一致する値だけでなく「特定の文字を含むデータ」を抽出したい場面は非常に多くあります。
SQLでこのような柔軟な検索を実現するために欠かせないのが、LIKE句を用いた部分一致検索です。
本記事では、初心者の方でもすぐに実践できるように、ワイルドカードの基本的な使い方から応用的なテクニックまでを詳しく解説します。
最新のデータベース環境においても変わらず重要となる、パフォーマンスへの配慮や適切な構文の選び方を学びましょう。
SQLのLIKE句とは?
SQLのLIKE句は、WHERE句の中で使用される比較演算子の一種です。
通常の = (等号)演算子が「完全に一致する文字列」を検索するのに対し、LIKE句は「パターンに合致する文字列」を検索するために使用されます。
例えば、顧客名簿から「佐藤」という苗字の人だけを抽出したり、商品リストから「スマホ」という言葉が含まれる製品を探したりすることが可能です。
このように、特定のキーワードがどこに含まれているかを条件に指定できるのが、部分一致検索の最大のメリットです。
部分一致検索の重要性
現代のアプリケーション開発において、検索機能はユーザー体験を左右する重要な要素です。
ユーザーが入力したキーワードが商品名の一部に含まれているだけでヒットするような、「あいまい検索」を実現するためにはLIKE句の理解が不可欠です。
また、大量のログデータから特定のパターンを持つエラーコードを抽出するといった、保守運用の現場でも頻繁に利用されます。
ワイルドカードの種類と使い方
LIKE句で部分一致を表現するためには、「ワイルドカード」と呼ばれる特殊な記号を組み合わせて使用します。
標準的なSQLでは、主に2種類の記号が使われます。
%(パーセント)記号:0文字以上の任意の文字列
% は、0文字、1文字、あるいはそれ以上の長さの「あらゆる文字列」に置き換えることができる記号です。
最も汎用性が高く、部分一致検索の主流として使われます。
例えば、'SQL%' と指定すれば、「SQL」で始まるすべての文字列が対象となります。
_(アンダースコア)記号:任意の1文字
_ は、正確に「1文字」分だけを置き換える記号です。
文字数を固定して検索したい場合に非常に便利です。
例えば、'A_CD' と指定すれば、「ABCD」や「A1CD」は一致しますが、「ABBCD」は一致しません。
3つの部分一致パターン
LIKE句とワイルドカードを組み合わせることで、大きく分けて3つの検索パターンを作成できます。
それぞれの用途と具体的なコード例を見ていきましょう。
1. 前方一致検索
文字列の「先頭」が特定のキーワードで始まるデータを検索する方法です。
キーワードの直後に % を配置します。
-- '東京'で始まる住所を抽出する
SELECT * FROM users
WHERE address LIKE '東京都%';
東京都千代田区...
東京都新宿区...
東京都渋谷区...
前方一致は、郵便番号や商品カテゴリコードなど、階層構造を持つデータの検索によく使われます。
2. 後方一致検索
文字列の「末尾」が特定のキーワードで終わるデータを検索する方法です。
キーワードの直前に % を配置します。
-- メールアドレスのドメインが 'gmail.com' であるユーザーを抽出する
SELECT * FROM users
WHERE email LIKE '%gmail.com';
user1@gmail.com
test_user@gmail.com
ファイルの拡張子(.jpgや.pdfなど)を指定して検索する際などにも役立ちます。
3. 部分一致(中間一致)検索
文字列の「どこか」に特定のキーワードが含まれているデータを検索する方法です。
キーワードの前後を % で囲みます。
-- 商品名に 'ワイヤレス' という単語を含むデータを抽出する
SELECT * FROM products
WHERE product_name LIKE '%ワイヤレス%';
ワイヤレスマウス
ワイヤレスキーボード
高音質ワイヤレスイヤホン
最も自由度が高い検索方法であり、Webサイトのキーワード検索窓などで一般的に利用される形式です。
実践的なテクニックと注意点
LIKE句を実務で活用するためには、基本的な構文以外にも知っておくべき知識があります。
特殊文字を検索するESCAPE句
検索したい文字列自体に % や _ が含まれている場合、そのままではワイルドカードとして認識されてしまいます。
これを回避するために、ESCAPE句を使用します。
-- '100%' という文字列を検索する(# をエスケープ文字に指定)
SELECT * FROM promotions
WHERE discount_rate LIKE '100#%' ESCAPE '#';
この例では # の直後の % が、ただの文字として扱われます。
大文字・小文字の区別
LIKE句がアルファベットの大文字と小文字を区別するかどうかは、使用しているデータベース製品や設定(照合順序)によって異なります。
| データベース | デフォルトの動作 |
|---|---|
| MySQL | 一般的に区別しない(設定による) |
| PostgreSQL | 区別する(区別したくない場合は ILIKE を使用) |
| SQL Server | 照合順序(Collation)の設定に依存する |
| Oracle | 区別する |
意図しない検索結果を防ぐために、開発環境の挙動をあらかじめ確認しておきましょう。
パフォーマンスへの影響とインデックス
LIKE句を使用する際、最も注意しなければならないのが「検索スピード」です。
大量のデータを保持するテーブルに対して安易に LIKE を使うと、レスポンスが著しく低下する恐れがあります。
インデックスが効くのは「前方一致」のみ
一般的に、データベースのB-treeインデックスは、「前方一致検索」であれば有効に機能します。
しかし、後方一致や中間一致(%キーワード%)の場合、インデックスが使われず、すべてのデータを一行ずつ確認する「フルテーブルスキャン」が発生します。
数百万件以上のデータがあるテーブルで中間一致検索を頻繁に行うと、システム全体の動作が重くなる原因になります。
パフォーマンス対策
どうしても高速な中間一致検索が必要な場合は、LIKE句以外の手段を検討する必要があります。
例えば、MySQLやPostgreSQLが提供している「全文検索エンジン(Full-Text Search)」を利用する方法があります。
また、検索対象の文字列をあらかじめ分割して保存しておくといった、データベース設計レベルでの工夫も有効です。
検索頻度とデータ量に応じて、最適な手法を選択しましょう。
アンダースコアを用いた応用例
% に比べて影の薄い _ ですが、特定のフォーマットを持つデータを抽出する際には非常に強力です。
例えば、4桁の製品コードがあり、2文字目が「A」であるものだけを探したい場合は以下のように記述します。
-- 2文字目が 'A' である4文字のコードを検索
SELECT * FROM codes
WHERE code LIKE '_A__';
BA12
CA99
ZA00
このように、文字の位置を正確に指定できる特性を活かすことで、精度の高いフィルタリングが可能になります。
最新のSQLトレンドと部分一致
2026年現在のモダンな開発現場では、SQLだけでなく、外部の検索エンジン(ElasticsearchやAlgoliaなど)と連携する構成も一般的です。
しかし、開発初期や小規模な管理画面、バッチ処理などでは、依然としてSQLのLIKE句が最も手軽で強力な手段です。
まずはLIKE句を使いこなし、限界が来たところで高度な検索技術へステップアップするのが賢明なアプローチと言えるでしょう。
まとめ
SQLのLIKE句を用いた部分一致検索は、柔軟なデータ抽出を実現するための基本スキルです。
%(0文字以上の任意文字列)と _(任意の1文字)という2つのワイルドカードを使い分けることで、前方一致・後方一致・中間一致のパターンを自由に表現できます。
一方で、中間一致や後方一致はインデックスが効かないため、大規模なデータセットを扱う際にはパフォーマンス面に注意が必要です。
実務においては、検索の利便性とシステムの負荷のバランスを考えながら、適切なクエリを設計することを心がけてください。
今回紹介した基本をマスターすれば、データベースから必要な情報を効率よく取り出すことができるようになるはずです。
