0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PostgreSQL:INで複数の候補を指定する|ORへの書き換えと実行結果

0
Posted at

今回は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で並べる代わりに、候補をまとめて記述できます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?