今回初めて学んだについて忘れないようにまとめておきたいと思います!
「ある文字を含むデータ」を取得したい場合は、「〜のような」という意味を持つ、「LIKE演算子」を用いるといいです!
LIKEって何?
SQLにおけるLIKE演算子は、部分一致検索やパターンに基づいた検索をするときに使います。 WHERE句とセットで使い、%や_といったワイルドカードを指定する。
基本構文とワイルドカード
SELECT * FROM users WHERE name LIKE 'A%';
記号 | 意味 | 例 |
---|---|---|
% | 任意の文字列(0文字以上) | 'A%' → Aから始まる |
_ | 任意の1文字 | 'A_' → Aで始まり、2文字目が何でもOK |
使用例:部分一致でユーザー検索
名前に「田」が含まれているユーザーを取得
SELECT * FROM users WHERE name LIKE '%田%';
3文字目に「子」がある名前を取得
SELECT * FROM users WHERE name LIKE '__子%';
大文字小文字の違いに注意!
・MySQL → デフォルトではLIKEは大文字小文字を区別しない(照合順序による)
・PostgreSQL → 大文字小文字を区別する(ILIKEで無視できる)
PostgreSQL例:
SELECT * FROM users WHERE name ILIKE 'yamada';
LIKEでハマりがちなポイント
・%の位置が逆だと検索結果が出ない
・LIKEでインデックスが効きにくくなり、パフォーマンスが低下する
・Unicodeや日本語の場合、照合順序・文字コードに注意
よく使う応用パターン
パターン | 用途 | クエリ例 |
---|---|---|
前方一致 | 指定文字から始まる | LIKE 'foo%' |
後方一致 | 指定文字で終わる | LIKE '%bar' |
部分一致 | 指定文字を含む | LIKE '%baz%' |
単一文字指定 | 特定の位置を判定 | LIKE '_a%'(2文字目がa) |
まとめ
LIKEは柔軟な検索ができる反面、パフォーマンスに注意
ILIKEやREGEXPなど、他の演算子とも使い分けが必要
実際の開発では 全文検索エンジンやORマッパーの機能も検討する価値あり!