「田中さんって名前の人、データベースに何人いるかな?」 「メールアドレスが@gmail.comで終わる人を全員抽出したい」
こんな時に大活躍するのが、SQLのLIKE演算子(ライク演算子)です。
例えるなら、LIKEは「あいまい検索ができる魔法の虫眼鏡」のようなもの。完全に一致しなくても、似ているデータを見つけ出してくれます。
この記事を読めば、あなたも今日からLIKE演算子を使いこなせるようになりますよ!
そもそもLIKE演算子って何?基本をおさえよう

普通の検索(=)との違い
まず、普通の検索方法と比較してみましょう。
通常の検索(完全一致):
SELECT * FROM users WHERE name = '田中太郎'
これだと「田中太郎」さんしか見つかりません。
LIKE演算子を使った検索:
SELECT * FROM users WHERE name LIKE '田中%'
これなら「田中太郎」「田中花子」「田中一郎」全員が見つかります!
つまり、部分的に一致するデータを探せるのがLIKE演算子の特徴なんです。
LIKE演算子が活躍する場面
実際の仕事でよく使われる場面を見てみましょう。
こんな時に便利:
- 名前の一部しか覚えていない顧客を探す
- 特定のドメインのメールアドレスを抽出
- 商品名に特定のキーワードが含まれる商品を検索
- 電話番号が特定の市外局番で始まる人を探す
- 住所が特定の都道府県の人だけを抽出
データベースを扱う仕事では、ほぼ毎日使うと言っても過言ではありません。
魔法の記号「ワイルドカード」を使いこなそう
%(パーセント):何文字でもOKの万能選手
**%は「0文字以上の任意の文字」**を表します。
分かりやすく言うと、「ここは何が来てもいいよ、なくてもいいよ」という意味です。
実例で理解しよう:
-- 「山」で始まる名前を全部探す
SELECT * FROM users WHERE name LIKE '山%'
-- 結果:山田、山本、山口、山川、山...
-- 「子」で終わる名前を全部探す
SELECT * FROM users WHERE name LIKE '%子'
-- 結果:花子、良子、美子、優子...
-- 「田」が含まれる名前を全部探す
SELECT * FROM users WHERE name LIKE '%田%'
-- 結果:田中、山田、前田、田村、吉田...
_(アンダースコア):1文字だけの指定席
**_は「任意の1文字」**を表します。
「ここは何でもいいけど、必ず1文字入れてね」という意味です。
実例で理解しよう:
-- 「田□」の2文字の名前を探す(□は任意の1文字)
SELECT * FROM users WHERE name LIKE '田_'
-- 結果:田中、田村、田口...(田だけではヒットしない)
-- 電話番号が「03-1234-56□□」の形式を探す
SELECT * FROM users WHERE phone LIKE '03-1234-56__'
-- 結果:03-1234-5678、03-1234-5600、03-1234-5611...
組み合わせ技で検索の幅を広げる
ワイルドカードは組み合わせて使うこともできます。
-- 2文字目が「田」の3文字の名前
SELECT * FROM users WHERE name LIKE '_田_'
-- 結果:前田勇、小田切、太田原...
-- 「株式会社」で始まり「商事」で終わる会社名
SELECT * FROM companies WHERE name LIKE '株式会社%商事'
-- 結果:株式会社三井商事、株式会社伊藤商事...
実践!よく使うLIKEパターン集
パターン1:メールアドレスのドメイン検索
特定のメールサービスを使っている人を探したい時の定番パターンです。
-- Gmailユーザーを探す
SELECT * FROM users WHERE email LIKE '%@gmail.com'
-- 会社のメールアドレス(co.jp)を使っている人
SELECT * FROM users WHERE email LIKE '%@%.co.jp'
パターン2:電話番号の地域検索
市外局番で地域を絞り込む時に便利です。
-- 東京(03)の電話番号
SELECT * FROM customers WHERE phone LIKE '03-%'
-- 携帯電話(090、080、070)
SELECT * FROM customers
WHERE phone LIKE '090-%'
OR phone LIKE '080-%'
OR phone LIKE '070-%'
パターン3:商品名・カテゴリ検索
ECサイトなどでよく使われるパターンです。
-- 「ゲーミング」という言葉が入った商品
SELECT * FROM products WHERE name LIKE '%ゲーミング%'
-- 型番が「A」で始まり「2024」で終わる商品
SELECT * FROM products WHERE model LIKE 'A%2024'
パターン4:日付の部分検索
特定の年や月のデータを抽出する時に使えます。
-- 2024年のデータ(日付が文字列の場合)
SELECT * FROM orders WHERE order_date LIKE '2024-%'
-- 12月のデータ(どの年でも)
SELECT * FROM orders WHERE order_date LIKE '%-12-%'
大文字小文字の扱い:データベースによって違うので注意!
基本ルール(でも例外あり)
実は、大文字小文字の扱いは使っているデータベースによって違います。
主なデータベースの違い:
MySQL(デフォルト):
-- これらは同じ結果になる(大文字小文字を区別しない)
SELECT * FROM users WHERE name LIKE 'yamada%'
SELECT * FROM users WHERE name LIKE 'YAMADA%'
SELECT * FROM users WHERE name LIKE 'Yamada%'
PostgreSQL:
-- これらは違う結果になる(大文字小文字を区別する)
SELECT * FROM users WHERE name LIKE 'yamada%' -- yamadaのみ
SELECT * FROM users WHERE name LIKE 'YAMADA%' -- YAMADAのみ
-- 区別したくない場合はILIKEを使う
SELECT * FROM users WHERE name ILIKE 'yamada%' -- 全部ヒット
確実に検索するためのテクニック
大文字小文字を気にせず検索したい場合の対処法です。
-- 方法1:LOWER関数で小文字に統一
SELECT * FROM users
WHERE LOWER(name) LIKE LOWER('Yamada%')
-- 方法2:UPPER関数で大文字に統一
SELECT * FROM users
WHERE UPPER(name) LIKE UPPER('Yamada%')
よくある間違いと解決方法

間違い1:ワイルドカードを付け忘れる
-- ❌ これだと完全一致検索になってしまう
SELECT * FROM users WHERE name LIKE '田中'
-- ⭕ 部分一致にするなら%を付ける
SELECT * FROM users WHERE name LIKE '%田中%'
間違い2:特殊文字をそのまま検索
メールアドレスの「_」や「%」を検索したい時は要注意!
-- ❌ test_userというメールを探したいのに...
SELECT * FROM users WHERE email LIKE 'test_user@%'
-- これだと「test」+任意の1文字+「user」になってしまう
-- ⭕ エスケープ文字を使う
SELECT * FROM users WHERE email LIKE 'test\_user@%' ESCAPE '\'
間違い3:NULLデータの扱い
LIKEではNULL(空っぽ)のデータは検索できません。
-- ❌ これではNULLは見つからない
SELECT * FROM users WHERE memo LIKE '%'
-- ⭕ NULLを探すには専用の方法を使う
SELECT * FROM users WHERE memo IS NULL
-- ⭕ NULLも含めて全部見たい場合
SELECT * FROM users WHERE memo LIKE '%' OR memo IS NULL
間違い4:パフォーマンスを考えない検索
-- ❌ 前方一致以外は処理が遅い
SELECT * FROM users WHERE name LIKE '%田中%' -- 遅い
-- ⭕ できれば前方一致で検索
SELECT * FROM users WHERE name LIKE '田中%' -- 速い
応用テクニック:もっと便利に使う方法
NOT LIKEで除外検索
「〜以外」を探したい時に使います。
-- Gmail以外のメールアドレス
SELECT * FROM users WHERE email NOT LIKE '%@gmail.com'
-- 「株式会社」が付かない会社名
SELECT * FROM companies WHERE name NOT LIKE '株式会社%'
複数条件の組み合わせ
ORやANDと組み合わせて、より細かい検索ができます。
-- 東京または大阪在住
SELECT * FROM users
WHERE address LIKE '%東京都%'
OR address LIKE '%大阪府%'
-- 名前に「田」が入っていて、かつGmailユーザー
SELECT * FROM users
WHERE name LIKE '%田%'
AND email LIKE '%@gmail.com'
CASE文と組み合わせて分類
検索結果を分類する時に便利です。
SELECT name,
CASE
WHEN email LIKE '%@gmail.com' THEN 'Gmail'
WHEN email LIKE '%@yahoo.co.jp' THEN 'Yahoo'
WHEN email LIKE '%@%.co.jp' THEN '企業メール'
ELSE 'その他'
END AS mail_type
FROM users
正規表現が使える場合(MySQL、PostgreSQL)
もっと複雑なパターンを検索したい時は正規表現も選択肢です。
-- MySQLの場合(REGEXP)
SELECT * FROM users WHERE phone REGEXP '^0[789]0-'
-- PostgreSQLの場合(~)
SELECT * FROM users WHERE phone ~ '^0[789]0-'
パフォーマンスを意識した使い方
インデックスが効く条件・効かない条件
データベースの検索速度に大きく影響する重要なポイントです。
インデックスが効く(速い):
-- 前方一致検索
SELECT * FROM users WHERE name LIKE '田中%'
インデックスが効かない(遅い):
-- 中間一致・後方一致検索
SELECT * FROM users WHERE name LIKE '%田中%'
SELECT * FROM users WHERE name LIKE '%田中'
大量データを扱う時の工夫
データが多い時は、こんな工夫をしてみましょう。
工夫1:検索範囲を絞る
-- 期間を限定してから検索
SELECT * FROM logs
WHERE created_at >= '2024-01-01'
AND message LIKE '%ERROR%'
工夫2:全文検索機能を使う
-- MySQLのFULLTEXT検索(事前設定が必要)
SELECT * FROM articles
WHERE MATCH(content) AGAINST('検索キーワード')
まとめ:今日から使えるLIKE演算子
ここまで読んでいただき、ありがとうございます!
LIKE演算子の基本から応用まで、たくさんのパターンを見てきました。
覚えておきたい3つのポイント:
- %は0文字以上、_は1文字という基本を押さえる
- 前方一致検索(’文字%’)が最も高速
- データベースによって大文字小文字の扱いが違う
最初は簡単な検索から始めて、徐々に複雑な条件にチャレンジしていきましょう。
実践のコツ: まずは自分が普段使っているデータで、簡単な名前検索から試してみてください。慣れてきたら、メールアドレスや電話番号の検索にも挑戦してみましょう。
SQLのLIKE演算子は、データベースを扱う上で必須のスキル。この記事で学んだことを実際のデータベースで試して、ぜひマスターしてくださいね!
何度も使っているうちに、自然と手が動くようになりますよ。頑張ってください!
コメント