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など)
項目 | MySQL | PostgreSQL | SQLite | SQL 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で試してみてください!