※ この記事にはアフィリエイトリンクが含まれます
MySQLを使っていると、
「名前に特定の文字を含むデータだけ取り出したい」
「メールアドレスが @gmail.com
のユーザーを探したい」
といった あいまい検索 が必要になる場面は多いですよね。
そんなときに便利なのが LIKE
演算子 です。
LIKE
を使えば、部分一致・前方一致・後方一致などの検索が簡単に書けるようになります。
本記事では、初心者でも理解しやすいように 基本構文から実用例まで丁寧に解説 していきます。
さらに記事の最後では、
- 独学で学びたい人向けのおすすめ書籍、動画学習サイト
- 体系的に学びたい人向けのプログラミングスクール
も紹介していますので、自分に合った学習スタイルを見つけてください。
LIKEとは?基本的な使い方
MySQLで文字列を検索するとき、通常は次のように =
演算子 を使います。
SELECT * FROM users
WHERE name = '田中';
この場合、「名前が 田中 と完全一致するデータ」だけが取得されます。
つまり「田中太郎」や「田中一郎」は検索に引っかかりません。
ここで便利なのが LIKE
演算子 です。LIKE
を使えば、特定の文字を含むデータや一部が一致するデータ を柔軟に検索できます。
基本の構文は次の通りです。
SELECT * FROM テーブル名
WHERE カラム名 LIKE '検索パターン';
例:名前に「田中」を含むユーザーを探したい場合
SELECT * FROM users
WHERE name LIKE '%田中%';
このように書くことで、田中太郎
や 山田中一
なども検索結果に含められます。
ワイルドカード文字の使い方
LIKE
であいまい検索を行うときには、ワイルドカード と呼ばれる特殊文字を使います。
MySQLで使える代表的なワイルドカードは次の2種類です。
%
0文字以上の任意の文字列をヒットさせる
%
は「0文字以上の任意の文字列」にマッチします。- つまり「前に何があってもいい」「後ろに何があってもいい」という使い方ができます。
例:名前に「田」が含まれるユーザーを検索する
SELECT * FROM users
WHERE name LIKE '%田%';
→ 田中
, 山田
, 小田切
などがヒットします。
例:名前が「田」で始まるユーザーを検索する
SELECT * FROM users
WHERE name LIKE '%田';
→ 田中
, 田村
, 田辺
などがヒットします。
例:名前が「田」で終わるユーザーを検索する
SELECT * FROM users
WHERE name LIKE '%田';
→ 山田
, 小田
, 安田
などがヒットします。
_
任意の1文字をヒットさせる
_
は「任意の1文字」にマッチします。- 部分的に1文字だけを置き換えて検索したいときに便利です。
例:2文字目が「田」である名前を検索する
SELECT * FROM users
WHERE name LIKE '_田%';
→ 小田切, 山田, 佐田岡 などの2文字目に「田」が入る文字列がヒットします。
%
… 0文字以上の任意の文字列_
… 任意の1文字
これらを組み合わせれば、柔軟な検索が可能になります。
LIKE を使う注意点とパフォーマンスについて
LIKE
は便利な一方で、使い方によっては 検索が遅くなる 場合があります。実務で使うときには次の点に注意しましょう。
先頭に%
を付けるとインデックスが効かない
-- インデックスが効きにくい例
SELECT * FROM users
WHERE name LIKE '%田%';
このように 先頭に %
を付ける検索 は、全データを順番にチェックするため、件数が多いテーブルでは処理が重くなります。
→ 数百万件を超える大規模データでは注意が必要です。
逆に、末尾に %
を付ける検索(前方一致) はインデックスが効きやすいです。
-- インデックスが効きやすい例
SELECT * FROM users
WHERE name LIKE '田%';
大文字・小文字の違いに注意
MySQLでは、照合順序(Collation) によって大文字小文字を区別するかどうかが決まります。照合順序についてはこちらの記事で解説をしています。
utf8_general_ci
→ 大文字小文字を区別しない(Tanaka
とtanaka
は同じと扱う)utf8_bin
→ 大文字小文字を区別する
もし「大文字小文字を厳密に区別したい」「逆に区別したくない」という場合は、テーブル作成時やクエリで照合順序を意識する必要があります。
部分一致検索は負荷がかかりやすい
%
を多用すると、どうしても検索対象が広がり、パフォーマンスに影響します。- 大規模データを扱う場合は、フルテキスト検索(FULLTEXT) や 正規表現検索(REGEXP) の利用を検討するのも有効です。
LIKE と = の違い
MySQLで文字列を検索する場合、LIKE
と =
は似ているようで挙動が大きく異なります。
=
は「完全一致」
=
は文字列が 完全に一致 した場合のみ結果を返します。
例:名前が「田中」と完全一致するデータを検索する
SELECT * FROM users
WHERE name = '田中';
→ 田中
はヒットするが、田中太郎
や 山田中
はヒットしません。
LIKE
は「部分一致も可能」
LIKE
は パターンマッチ で検索できます。
例:名前に「田中」を含むデータを検索する
SELECT * FROM users
WHERE name LIKE '%田中%';
→ 田中
, 田中太郎
, 山田中
などもヒットします。
まとめ
本記事では、MySQLで文字列のあいまい検索を行う LIKE
演算子 について解説しました。
LIKE
を使いこなせるようになると、検索条件の幅が広がり、実務でもすぐに役立ちます。
さらに効率よくSQLを学ぶなら、独学での学習もしくは、体系的に学べるプログラミングスクール の併用がおすすめです。
自分の学習スタイルに合わせて、次のステップに進んでみてください。それぞれの学習スタイルに沿ったおすすめの学習方法をざっくりと紹介します。
独学で自分のペースで進めていきたい方
書籍や【Schoo(スクー)】やUdemyなどの動画を使った学習がおすすめです。
プログラミングスクールでSQLだけでなくWeb開発なども学んでみたい方
おすすめのプログラミングスクールをピックアップして紹介します。
初心者におすすめのプログラミングスクールをまとめた記事はこちらに用意しているので、気になる方はこちらもぜひ参考にしてみてください。