今回はPostgreSQLのLIKEを使い、都市名の文字列パターンで施設を絞り込みます。取得したデータの意味を整理します。
所要時間は15分ほどです。
それでは、さっそく始めていきましょう!
今日のテーマと到達目標
LIKEで文字列の条件を書き、%と_の違いを説明できることが目標です。
用語の定義
| 用語・記号 | 意味 |
|---|---|
| パターン | 文字列がどのような形かを指定するもの |
| LIKE | 文字列が指定したパターンに一致するかを判定する |
| % | 0文字以上の任意の文字列を表す |
| _ | 任意の1文字を表す |
LIKEは文字列全体がパターンに一致するかを判定します。途中に特定の文字列を含む条件にしたい場合は、前後に%を付けます。
| 条件 | 意味 |
|---|---|
| city LIKE 'Shi%' | Shiで始まる都市名 |
| city LIKE '%ku' | kuで終わる都市名 |
| city LIKE '%yo%' | yoを含む都市名 |
今回は英字の大文字・小文字をデータに合わせて指定しています。
使用するTableと列
取得元はmobility.poisです。1行は1施設を表します。
| 列名 | 意味 |
|---|---|
| poi_id | 施設を識別するID |
| poi_name | 施設名 |
| city | 所在する都市 |
Shiで始まる都市の施設を取得する
実際に実行したSQLは次のとおりです。
SELECT poi_id, poi_name
FROM mobility.pois
WHERE city LIKE 'Shi%'
ORDER BY poi_id;
結果は16行でした。取得された施設IDは次のとおりです。
2, 3, 10, 11, 18, 19, 26, 27,
34, 35, 42, 43, 50, 51, 58, 59
最初の課題ではcity列の表示も指定されていましたが、実際のSELECTでは施設IDと施設名の2列を取得しました。WHEREではcityを条件に使えており、表示する列と条件判定に使う列は別に指定できることを確認しました。
「ShinjukuとShibuyaはそれぞれ一致するか」という質問には、「一致しています」と回答しました。どちらもShiで始まるためです。
kuで終わる都市の施設を取得する
次は、自分で末尾のパターンを指定しました。今回は都市の列も表示しています。
SELECT poi_id, poi_name, city
FROM mobility.pois
WHERE city LIKE '%ku'
ORDER BY poi_id;
実行結果は次の8行でした。
| poi_id | poi_name | city |
|---|---|---|
| 2 | Shinjuku_shopping_002 | Shinjuku |
| 10 | Shinjuku_shopping_010 | Shinjuku |
| 18 | Shinjuku_shopping_018 | Shinjuku |
| 26 | Shinjuku_shopping_026 | Shinjuku |
| 34 | Shinjuku_shopping_034 | Shinjuku |
| 42 | Shinjuku_shopping_042 | Shinjuku |
| 50 | Shinjuku_shopping_050 | Shinjuku |
| 58 | Shinjuku_shopping_058 | Shinjuku |
今回のデータでは、kuで終わる都市名はShinjukuでした。同じ都市にある複数の施設が、それぞれ1行ずつ返っています。
%と_の違いを確認する
最後に、文字列Tokyoが次のパターンに一致するかを、実行せずに回答しました。
| パターン | 回答 | 理由 |
|---|---|---|
| T% | 一致する | Tの後ろのokyoを%が表せる |
| T____ | 一致する | Tの後ろに4文字あり、_4個が対応する |
| T_ | 一致しない | _1個ではTの後ろの4文字に対応できない |
3問とも正解でした。T_はTと任意の1文字からなる2文字の文字列に一致するパターンです。Tokyoの先頭2文字だけを見て一致と判定するわけではありません。
これらは確認問題への回答であり、今回SQLで実行した結果ではありません。また、%yo%は書き方の例として説明したもので、実行画面では確認していません。
合格条件と学習記録
| 確認項目 | 確認できた内容 |
|---|---|
| 先頭のパターンを指定できる | Shi%で16施設を取得 |
| 末尾のパターンを自分で書ける | %kuでShinjukuの8施設を取得 |
| %と_の文字数の違いを説明できる | Tokyoに対する3問に正解 |
共有されたSQLはエラーなく実行できました。
まとめ
LIKEでは、%が0文字以上、_が1文字を表します。記号の位置と個数によって一致する文字列が変わるため、先頭・末尾・文字数のどれを指定したいか整理して書きます。