目次
where句でANDとORを同時に使うには?
基本的には以下の書き方をすれば可能です。
select * from テーブル名 where 条件1 and (条件2 or 条件3)
上記の形式だと、「条件1」と「条件2もしくは条件3」を満たすデータを取得することができます。
具体的なコード例
前提として以下のusersテーブルがあるとします。(カラムはname, age, address, genderの4種類)
id | name | age | address | gender | created_at | updated_at |
1 | 田中 | 20 | 東京 | male | 2021-10-09 05:11:05 | 2021-10-09 05:11:05 |
2 | 鈴木 | 34 | 千葉 | female | 2021-10-09 05:11:05 | 2021-10-09 05:11:05 |
3 | 佐藤 | 19 | 神奈川 | female | 2021-10-09 05:11:05 | 2021-10-09 05:11:05 |
4 | 高橋 | 40 | 東京 | female | 2021-10-09 05:11:05 | 2021-10-09 05:11:05 |
5 | 森田 | 16 | 東京 | male | 2021-10-09 05:11:05 | 2021-10-09 05:11:05 |
「genderがfemale」「ageが20未満もしくはaddressが千葉」である場合
select * from users where gender = 'female' and (age < 20 or address = '千葉')
実行結果は以下のとおりです。
id | name | age | address | gender | created_at | updated_at |
2 | 鈴木 | 34 | 千葉 | female | 2021-10-09 05:11:05 | 2021-10-09 05:11:05 |
3 | 佐藤 | 19 | 神奈川 | female | 2021-10-09 05:11:05 | 2021-10-09 05:11:05 |
「genderがfemale」「addressが千葉もしくは東京」である場合
select * from users where gender = 'female' and (address = '千葉' or address = '東京');
実行結果は以下の通りです。
id | name | age | address | gender | created_at | updated_at |
2 | 鈴木 | 34 | 千葉 | female | 2021-10-09 05:11:05 | 2021-10-09 05:11:05 |
4 | 高橋 | 40 | 東京 | female | 2021-10-09 05:11:05 | 2021-10-09 05:11:05 |
まあこちらの場合は、OR句を使わず「WHERE IN」で表現することも可能ですね。
select * from users where gender = 'female' and address in('千葉', '東京');
実行結果は変わらず以下の通りです。
id | name | age | address | gender | created_at | updated_at |
2 | 鈴木 | 34 | 千葉 | female | 2021-10-09 05:11:05 | 2021-10-09 05:11:05 |
4 | 高橋 | 40 | 東京 | female | 2021-10-09 05:11:05 | 2021-10-09 05:11:05 |