文字列の一部で検索したい
このページでできること
LIKEは文字列を前方一致・後方一致・部分一致で検索します。%を置く位置によって、先頭・末尾・途中のどこを探すかが変わります。
SQL例の例
SELECT name
FROM employees
WHERE name LIKE '佐%'
ORDER BY id;この例で使うサンプル表を見る共通の架空データと、練習用の表を確認します
全20項目で共通の架空データです。salary は月給(円)。NULL は未設定を表します。結果の小数点以下の表示桁数は実行環境により異なります。
employees
| id | name | department_id | salary |
|---|---|---|---|
| 1 | 佐藤 | 1 | 300000 |
| 2 | 鈴木 | 2 | 400000 |
| 3 | 佐々木 | 1 | 350000 |
| 4 | 高橋 | 2 | 400000 |
| 5 | 田中 | NULL | 250000 |
| 6 | 伊藤 | 3 | NULL |
departments
| id | name |
|---|---|
| 1 | 営業 |
| 2 | 開発 |
| 3 | 人事 |
| 4 | 広報 |
employees.department_id が departments.id に対応します。表は説明用です。このサイト上でSQLは実行しません。
使い方を順番に確認する練習を始めるときは、この手順に沿って進めます
使い方
- 名前が「佐」で始まる人を探すので、検索する文字の後ろに%を付ける
- WHERE name LIKE '佐%' で前方一致を指定する
- id順に表示し、佐藤・佐々木の2人が見つかることを確認する
結果の例
| name |
|---|
| 佐藤 |
| 佐々木 |
注意点
%は0文字以上、_はちょうど1文字に一致します。たとえば LIKE '佐_' は佐藤に一致し、3文字の佐々木には一致しません。大文字・小文字などの一致規則はDBや照合順序で異なります。
前方一致・後方一致・部分一致を結果で比べる
後方一致:「藤」で終わる社員を探す
SELECT name
FROM employees
WHERE name LIKE '%藤'
ORDER BY id;最初の佐%は「佐」で始まる名前でした。今度は%を「藤」の前に置き、末尾が「藤」の名前を探します。佐藤・伊藤の2人が残り、佐々木は含まれません。
| name |
|---|
| 佐藤 |
| 伊藤 |
部分一致:「々」をどこかに含む社員を探す
SELECT name
FROM employees
WHERE name LIKE '%々%'
ORDER BY id;%を検索する文字の前後に置くと、その文字が先頭・途中・末尾のどこにあっても一致します。佐々木は「々」を途中に含むので残ります。々%や%々では先頭・末尾が合わず、この表では0人です。
| name |
|---|
| 佐々木 |
うまくいかないときに確認するエラーや想定と違う結果が出たときの確認ポイント
うまくいかないとき
「含む」で探したいのに見つからない場合は、%が検索する文字の前後にあるか確認します。前方一致は佐%、後方一致は%藤、部分一致は%々%です。引用符と%は半角を使います。LIKEは正規表現ではなく、%や_自体を探すときはESCAPEによる扱いを公式資料で確認してください。
PostgreSQLの構文を基準にしています。MySQL・SQL Server・SQLiteなどでは、一部の構文や挙動が異なります。