今回はPostgreSQLのINを使い、指定した候補のいずれかと一致する施設を取得します。取得したデータの意味を整理します。
所要時間は15分ほどです。
それでは、さっそく始めていきましょう!
今日のテーマと到達目標
INを使ったSQLを自分で書き、ORとの関係を説明できることが目標です。
用語の定義
| 用語 | 意味 |
|---|---|
| 候補の一覧 | 条件に使う値を括弧内にカンマ区切りで並べたもの |
| IN | 列の値が候補のいずれかと等しいかを判定する指定 |
| OR | 少なくとも一方の条件が成り立つことを表す演算子 |
今回はNULLを含まない都市名を扱います。取得元はmobility.poisで、1行は1施設を表します。poi_idは施設ID、poi_nameは施設名、cityは所在する都市です。
INとORの関係
次の2つは、今回の都市名について同じ条件を表します。
city IN ('Tokyo', 'Shinjuku')
city = 'Tokyo' OR city = 'Shinjuku'
同じ列について、複数の候補との一致を調べるときにINでまとめて書けます。
2つの都市を候補にする
SELECT poi_id, poi_name, city
FROM mobility.pois
WHERE city IN ('Tokyo', 'Shinjuku')
ORDER BY poi_id;
実行結果は16行でした。取得された施設IDは次のとおりです。
1, 2, 9, 10, 17, 18, 25, 26,
33, 34, 41, 42, 49, 50, 57, 58
都市はTokyoまたはShinjukuです。
「Shibuyaは今回の条件を満たすか」という確認問題では、最初に「含まれます」と答えた後、「含まれません」と訂正しました。Shibuyaは候補のどちらとも一致しないため、訂正後の回答が正解です。
自分で3つの候補を指定する
次はShibuya、Ikebukuro、Yokohamaのいずれかにある施設を取得するSQLを書きました。
SELECT poi_id, poi_name, city
FROM mobility.pois
WHERE city IN ('Shibuya', 'Ikebukuro', 'Yokohama')
ORDER BY poi_id;
実行画面では24行が返りました。施設IDは次のとおりです。
3, 4, 5, 11, 12, 13, 19, 20, 21, 27, 28, 29,
35, 36, 37, 43, 44, 45, 51, 52, 53, 59, 60, 61
結果の先頭3行は次の内容でした。
| poi_id | poi_name | city |
|---|---|---|
| 3 | Shibuya_restaurant_003 | Shibuya |
| 4 | Ikebukuro_cafe_004 | Ikebukuro |
| 5 | Yokohama_office_005 | Yokohama |
INは候補に一致する各施設の行を取得します。都市名を3つ指定しても、結果が3行になるわけではありません。また、並び順はINの候補順ではなく、今回のORDER BY poi_idで指定しています。
ORへ書き換えて実行する
最後に、同じ条件をORで書き換えました。
SELECT poi_id, poi_name, city
FROM mobility.pois
WHERE city = 'Shibuya'
OR city = 'Ikebukuro'
OR city = 'Yokohama'
ORDER BY poi_id;
条件式を答えるだけでなく、SQL全体を実行しました。実際の入力では小文字のorを使い、正常に実行できています。
結果はINのSQLと同じ24行でした。施設ID、施設名、都市が同じ順序で表示されることを実行画面で確認しました。
書き方を整理する
| 指定 | 書く内容 |
|---|---|
| IN | 列名を書き、括弧内に候補の値を並べる |
| OR | 列名と値の一致を判定する条件式を、それぞれ書いてつなぐ |
-- INでは候補の値を並べる
city IN ('Shibuya', 'Ikebukuro', 'Yokohama')
-- ORでは条件式をつなぐ
city = 'Shibuya' OR city = 'Ikebukuro' OR city = 'Yokohama'
合格条件と学習記録
| 確認項目 | 確認できた内容 |
|---|---|
| INを使って取得できる | TokyoまたはShinjukuの16施設を取得 |
| 候補にない値を判定できる | Shibuyaは含まれないと訂正 |
| 自分で候補を指定できる | 3都市を指定して24施設を取得 |
| ORとの関係を確認できる | ORへ書き換えて実行し、同じ24行を取得 |
共有されたSQLはエラーなく実行できました。
まとめ
INは、指定した候補のいずれかと一致する行を取得する条件です。同じ列について等しいかを判定する条件をORで並べる代わりに、候補をまとめて記述できます。