MySQLやPostgreSQLで使える!SQLワイルドカードの使い方と注意点

DB

SQLで「あいまい検索」をしたい時に使うのがワイルドカードです。
例えば「田中」という名前で始まる人を探したり、「太郎」で終わる名前を探したりするのに便利です。

この記事では、SQL初心者でもわかるようにワイルドカードの基本から、
MySQL・PostgreSQL・SQLiteなどの違いまで、解説します。

ワイルドカードとは?

ワイルドカードとは、文字列の一部をあいまいに指定して検索できる記号です。
SQLの中では主にLIKE句と一緒に使います。

SQLで使えるワイルドカードの種類

%(パーセント)_(アンダースコア)
0文字以上の任意の文字列にマッチします。例:LIKE '田中%' → 「田中」「田中太郎」など任意の1文字だけにマッチします。
例:LIKE '佐_子' → 「佐藤子」「佐山子」など

LIKE句とワイルドカードの組み合わせ

SELECT * FROM users WHERE name LIKE '田中%';

このSQLは「名前が田中で始まる人」を探します。

〜ワイルドカードの使用例

-- 「鈴木」で終わる名前
SELECT * FROM users WHERE name LIKE '%鈴木';

-- 3文字目が「山」
SELECT * FROM users WHERE name LIKE '__山%';

実践的な活用例

○ドメインでメール検索

-- Gmailのユーザーだけを抽出
SELECT * FROM users WHERE email LIKE '%@gmail.com';

○社員番号などの特定形式のデータを探す

-- 「A123」形式(英字1文字+数字3桁)の社員ID
SELECT * FROM employees WHERE employee_id LIKE 'A___';

データベースごとの違い(MySQL・PostgreSQLなど)

項目MySQLPostgreSQLSQLiteSQL Server
大文字小文字の区別デフォルトでは区別なし(OS依存)区別あり区別なし(基本)照合順序次第
ILIKE対応×○(大文字小文字を無視)××
エスケープ指定ESCAPE句ありESCAPE句ありESCAPE句ありESCAPE句あり

PostgreSQLだけの便利なILIKE

PostgreSQLでは ILIKE を使うことで、大文字小文字を区別せずに検索ができます。

-- 「Tanaka」でも「TANAKA」でもヒット
SELECT * FROM users WHERE name ILIKE 'tanaka%';

これは、ユーザーの入力ミスなどを許容したいときにとても便利です。

エスケープして特殊文字を検索する

ワイルドカード記号(%や_)をそのまま文字として検索したい場合は、ESCAPE句を使います。

-- 「100%満足」という文字列を検索
SELECT * FROM reviews WHERE comment LIKE '%100\%%' ESCAPE '\';

\ 以外の文字もエスケープ文字に指定できます:

SELECT * FROM reviews WHERE comment LIKE '%100$%%' ESCAPE '$';

ワイルドカードとインデックスの関係

ワイルドカードを使う際の注意点のひとつが「インデックスが効かなくなる」ことです。

-- インデックスが効きにくい例(先頭に%)
SELECT * FROM users WHERE name LIKE '%田中';

先頭に % を置くと、データベースは全件スキャンする必要があるため、検索が遅くなることがあります。

対策例

  • 可能な限り「前方一致(例:田中%)」を使う
  • 検索性能を重視する場合は、MySQLのFULLTEXT検索や、PostgreSQLのto_tsvectorによる全文検索を検討する

上級編:LIKEではできない複雑な検索にはREGEXP

ワイルドカードでは難しいパターンマッチには、正規表現(REGEXP)が便利です。

-- 数字4桁で終わる名前を検索(MySQL/PostgreSQL)
SELECT * FROM users WHERE name REGEXP '[0-9]{4}$';

ただし、REGEXPはLIKEよりも処理が重くなる傾向があるため、使用には注意が必要です。

ワイルドカード使用時の注意点

  • 先頭に % を使うとインデックスが効かず遅くなる
  • SQLインジェクションに注意(外部入力にはプリペアドステートメントを使おう)
  • 大文字小文字の区別はDBによって挙動が異なるので要確認
  • 特殊記号(% や _)を検索するときはエスケープが必要

まとめ

SQLのワイルドカード(%_)は、MySQL・PostgreSQL・SQLiteなどほとんどのデータベースで共通して使える便利な機能です。
あいまい検索やパターンマッチに役立ちますが、パフォーマンスや安全性にも影響するため、使い方には注意が必要です。

正しく理解して活用できれば、検索の柔軟性が一気に高まります。
ぜひ、実際のSQLで試してみてください!

タイトルとURLをコピーしました