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:ANDで複数条件を指定する|都市と開業日で施設を絞り込む

0
Posted at

今回はPostgreSQLのANDを使い、複数の条件をすべて満たす施設を取得します。取得したデータの意味を整理します。

所要時間は15分ほどです。
それでは、さっそく始めていきましょう!

今日のテーマと到達目標

2つの条件を組み合わせたSQLを自分で書き、どの行が取得対象になるか説明することが目標です。

用語の定義

用語 意味
条件式 各行が指定した条件を満たすかを判定する式
AND 条件式をつなぎ、両方が成り立つことを求める演算子
WHERE 条件1 AND 条件2 両方の条件が成り立つ行を取得する指定

今回は値が入力済みの都市と開業日を扱います。

取得元はmobility.poisです。1行は1施設を表します。

列名 意味
poi_id 施設を識別するID
poi_name 施設名
city 所在する都市
opened_date 開業日。DATE型

都市と開業日の条件を組み合わせる

まず、次の両方を満たす施設を取得しました。

  • 都市がTokyoである。
  • 開業日が2021年1月1日以降である。
SELECT poi_id, poi_name, city, opened_date
FROM mobility.pois
WHERE city = 'Tokyo'
  AND opened_date >= DATE '2021-01-01'
ORDER BY poi_id;

'Tokyo'は都市名として指定する文字列、DATE '2021-01-01'は基準となる日付です。開業日が基準日と同じか、それより後であることを>=で指定しています。

実際の実行結果は次の6行でした。

poi_id poi_name city opened_date
1 Tokyo_station_001 Tokyo 2021-01-15
9 Tokyo_station_009 Tokyo 2024-08-31
17 Tokyo_station_017 Tokyo 2021-02-09
25 Tokyo_station_025 Tokyo 2024-10-15
33 Tokyo_station_033 Tokyo 2021-09-07
57 Tokyo_station_057 Tokyo 2021-07-16

件数を制限していないため、今回のデータで両方の条件を満たす施設は6件と確認できます。

片方の条件だけでは含まれない

「都市がTokyoでも、開業日が2020年12月31日の施設は含まれるか」という確認問題には、「含まれません」と回答しました。

都市の条件は満たしますが、開業日の条件を満たしません。ANDでは、片方だけを満たしても取得対象にはなりません。

自分で条件を変える演習

次は、都市がShinjukuで、開業日が2021年1月1日より前の施設を取得するSQLを書きました。

実際に実行したSQLは次のとおりです。

SELECT poi_id, poi_name, city, opened_date
FROM mobility.pois
WHERE city = 'Shinjuku'
  AND opened_date < '2021-01-01'
ORDER BY poi_id ASC;

実行結果は次の4行でした。

poi_id poi_name city opened_date
2 Shinjuku_shopping_002 Shinjuku 2019-11-11
10 Shinjuku_shopping_010 Shinjuku 2020-07-14
34 Shinjuku_shopping_034 Shinjuku 2018-02-23
58 Shinjuku_shopping_058 Shinjuku 2020-03-27

「より前」なので、指定日ちょうどを含まない<を使っています。

今回のSQLでは日付の前にDATEを付けていませんが、DATE型のopened_dateと比較する文脈から、引用符内の値が日付として解釈され、実行できています。学習時には、次のように日付であることを明示しても同じ条件を指定できます。

WHERE city = 'Shinjuku'
  AND opened_date < DATE '2021-01-01'

この明示形は説明用で、上の4行はDATEを省略したSQLの実行画面で確認した結果です。

都市の条件を満たさない場合

「開業日が2020年でも、都市がTokyoの施設は今回の結果に含まれるか」という確認問題にも、「含まれません」と回答しました。

開業日の条件は満たしますが、都市がShinjukuという条件を満たさないためです。

都市の条件 開業日の条件 取得対象になるか
満たす 満たす なる
満たす 満たさない ならない
満たさない 満たす ならない
満たさない 満たさない ならない

合格条件と学習記録

確認項目 確認できた内容
ANDで条件を組み合わせて実行できる Tokyoかつ指定日以降の6施設を取得
自分で条件を変更できる Shinjukuかつ指定日より前の4施設を取得
日付条件が不成立なら除外されると分かる Tokyoでも2020年12月31日なら含まれないと回答
都市条件が不成立なら除外されると分かる 2020年開業でもTokyoなら含まれないと回答

共有されたSQLはエラーなく実行でき、確認問題にも正しく回答できました。

まとめ

WHERE 条件1 AND 条件2は、両方の条件を満たす行を取得する指定です。各条件を同じ行について確認し、一方だけ満たす行は結果に含めません。

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?