今回はPostgreSQLの文字列連結を使い、都市名と施設名をつなげて表示します。取得したデータの意味を整理します。
所要時間は15分ほどです。
それでは、さっそく始めていきましょう!
今日のテーマと到達目標
文字列を連結するSQLを自分で書き、取得結果と元のTableの値を区別できることが目標です。今回は文字列の操作のうち、連結を学習しました。
用語の定義
| 用語 | 意味 |
|---|---|
| 文字列 | 施設名や都市名など、文字の並びで表された値 |
| 文字列の連結 | 複数の文字列をつなげて1つの文字列にすること |
| 文字列リテラル | SQLに直接書く文字列。シングルクォートで囲む |
| 連結演算子 | PostgreSQLでは今回、縦棒2本の記号を使う |
連結演算子は||です。例えば、'Tokyo' || ' / ' || 'station'は、Tokyo / stationという文字列を作る式です。
使用するTableと列
取得元はmobility.poisです。1行が1施設を表す、準備済みの学習用データです。
| 列名 | 意味 |
|---|---|
| poi_id | 施設を識別するID |
| poi_name | 施設名 |
| city | 所在する都市 |
cityのように書くと列を指定します。一方、' / 'は半角スペース、スラッシュ、半角スペースという文字列そのものです。
都市名と施設名を連結する
SELECT
poi_id,
city,
poi_name,
city || ' / ' || poi_name AS facility_label
FROM mobility.pois
ORDER BY poi_id
LIMIT 5;
都市名、区切り文字、施設名の順につなげ、結果の列にfacility_labelという別名を付けます。
実行画面では5行が返り、連結結果は次のとおりでした。
| poi_id | facility_label |
|---|---|
| 1 | Tokyo / Tokyo_station_001 |
| 2 | Shinjuku / Shinjuku_shopping_002 |
| 3 | Shibuya / Shibuya_restaurant_003 |
| 4 | Ikebukuro / Ikebukuro_cafe_004 |
| 5 | Yokohama / Yokohama_office_005 |
自分で表示形式を変える
次は、施設名の後ろに都市名を括弧付きで表示するSQLを書きました。目標とする形式は次のとおりです。
Tokyo_station_001 (Tokyo)
最初は、次のように連結しました。
SELECT
poi_id,
poi_name || '(' || city || ')' AS facility_label
FROM mobility.pois
ORDER BY poi_id ASC
LIMIT 1;
SQLは実行できましたが、結果は次のようになりました。
Tokyo_station_001(Tokyo)
開き括弧の前の半角スペースが足りませんでした。
空白も文字列の一部として指定する
'('を' ('へ修正しました。シングルクォートの内側に半角スペースを入れます。
SELECT
poi_id,
poi_name || ' (' || city || ')' AS facility_label
FROM mobility.pois
ORDER BY poi_id ASC
LIMIT 1;
修正後の実行結果は次のとおりです。
poi_id | facility_label
--------+---------------------------
1 | Tokyo_station_001 (Tokyo)
(1 行)
式の中で列名や演算子の間を空けても、その空白が結果に追加されるわけではありません。表示したい空白は、今回のように文字列リテラルの中に含めます。
元の施設名や都市名は書き換わるのか
「このSELECTで元のpoi_nameやcityも書き換わるか」という質問には、「書き換わらない」と回答しました。
今回のSELECTは、保存されている値を使って連結結果を返します。元の施設名や都市名を更新する操作ではありません。
| 対象 | 施設IDが1の場合の値 |
|---|---|
| 元のpoi_name | Tokyo_station_001 |
| 元のcity | Tokyo |
| 取得結果のfacility_label | Tokyo_station_001 (Tokyo) |
facility_labelは今回の取得結果の列名です。このSELECTによって元のTableに列が追加されるわけでもありません。
合格条件と学習記録
| 確認項目 | 確認できた内容 |
|---|---|
| 文字列を連結できる | 都市名、区切り文字、施設名の連結結果を5行取得 |
| 表示形式を自分で指定できる | 施設名の後ろに都市名を括弧付きで表示 |
| 空白を文字列として指定できる | 開き括弧の前に半角スペースを加えて修正 |
| 元データと取得結果を区別できる | 元の値は書き換わらないと回答 |
まとめ
文字列の連結には||を使い、固定の文字はシングルクォートで囲みます。空白や括弧も、表示したい文字として明示します。
SELECTで作った表示用の文字列と、元のTableに保存された値を分けて考えることが大切です。