【MySQL】WHEREで文字列検索する方法|LIKEの使い方を初心者向けに解説

【MySQL】WHEREで文字列検索する方法|LIKEの使い方を初心者向けに解説

※ この記事にはアフィリエイトリンクが含まれます

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 → 大文字小文字を区別しない(Tanakatanaka は同じと扱う)
  • 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などの動画を使った学習がおすすめです。

IT資格の人気オンラインコース

プログラミングスクールでSQLだけでなくWeb開発なども学んでみたい方

おすすめのプログラミングスクールをピックアップして紹介します。

スクロールできます

DMM WEBCAMPエンジニア転職

【転職成功率98%】未経験からITエンジニア転職を求めている方へおすすめのコース。未経験から本気でITエンジニアにおすすめ。

CodeCamp(コードキャンプ)

現役エンジニアとのマンツーマンレッスンが魅力のオンライン完結型スクール。学習時間は毎日朝7時〜23時40分まで対応しており柔軟な学習スタイルが特長です。

RareTECH(レアテック)

2年間の徹底的な指導で”希少型エンジニア”になれる長期カリキュラム型のエンジニア育成スクール。学習サポートだけでなく、就職・転職支援までしてくれます。

初心者におすすめのプログラミングスクールをまとめた記事はこちらに用意しているので、気になる方はこちらもぜひ参考にしてみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

沖縄出身のエンジニアです。IT業界で5年以上の経験があり、主にC#やPHPを使って開発を行ってきました。新しい技術にも興味があり、日々学びながらスキルアップを目指しています。

コメント

コメントする

CAPTCHA


目次