【PostgreSQL】where句でANDとORを同時に使用して検索する方法

where句でANDとORを同時に使うには?

基本的には以下の書き方をすれば可能です。

select * from テーブル名 where 条件1 and (条件2 or 条件3)

上記の形式だと、「条件1」と「条件2もしくは条件3」を満たすデータを取得することができます。

具体的なコード例

前提として以下のusersテーブルがあるとします。(カラムはname, age, address, genderの4種類)

idnameageaddressgendercreated_atupdated_at
1田中20東京male2021-10-09 05:11:052021-10-09 05:11:05
2鈴木34千葉female2021-10-09 05:11:052021-10-09 05:11:05
3佐藤19神奈川female2021-10-09 05:11:052021-10-09 05:11:05
4高橋40東京female2021-10-09 05:11:052021-10-09 05:11:05
5森田16東京male2021-10-09 05:11:052021-10-09 05:11:05

「genderがfemale」「ageが20未満もしくはaddressが千葉」である場合

select * from users where gender = 'female' and (age < 20 or address = '千葉')

実行結果は以下のとおりです。

idnameageaddressgendercreated_atupdated_at
2鈴木34千葉female2021-10-09 05:11:052021-10-09 05:11:05
3佐藤19神奈川female2021-10-09 05:11:052021-10-09 05:11:05

「genderがfemale」「addressが千葉もしくは東京」である場合

select * from users where gender = 'female' and (address = '千葉' or address = '東京');

実行結果は以下の通りです。

idnameageaddressgendercreated_atupdated_at
2鈴木34千葉female2021-10-09 05:11:052021-10-09 05:11:05
4高橋40東京female2021-10-09 05:11:052021-10-09 05:11:05

まあこちらの場合は、OR句を使わず「WHERE IN」で表現することも可能ですね。

select * from users where gender = 'female' and address in('千葉', '東京');

実行結果は変わらず以下の通りです。

idnameageaddressgendercreated_atupdated_at
2鈴木34千葉female2021-10-09 05:11:052021-10-09 05:11:05
4高橋40東京female2021-10-09 05:11:052021-10-09 05:11:05
タイトルとURLをコピーしました