受講料が最大70%OFF 受講料が最大70%OFF

SQLのwhere句で複数の条件を指定する方法についてまとめています。

SQLのwhere句で複数の条件を指定するには、andとorで条件式を記述

where句に複数の条件を記述するには、条件式をandまたはorで接続します。

以下は、employees(社員テーブル)から、gender(性別)=’F’(女性)かつbirth_date(誕生日)が1960年12月31日以前もしくは、gender=’M’(男性)かつbirth_dateが1970年1月1日以降のレコードを抽出する例です。

mysql> select * from employees
where gender = 'F' and birth_date < '1960-12-31'
or gender = 'M' and birth_date > '1970-01-01'
limit 10;

+--------+------------+------------+------------+--------+------------+
| emp_no | birth_date | first_name | last_name  | gender | hire_date  |
+--------+------------+------------+------------+--------+------------+
|  10006 | 1953-04-20 | Anneke     | Preusig    | F      | 1989-06-02 |
|  10007 | 1957-05-23 | Tzvetan    | Zielinski  | F      | 1989-02-10 |
|  10009 | 1952-04-19 | Sumant     | Peac       | F      | 1985-02-18 |
|  10011 | 1953-11-07 | Mary       | Sluis      | F      | 1990-01-22 |
|  10017 | 1958-07-06 | Cristinel  | Bouloucos  | F      | 1993-08-03 |
|  10018 | 1954-06-19 | Kazuhide   | Peha       | F      | 1987-04-03 |
|  10023 | 1953-09-29 | Bojan      | Montemayor | F      | 1989-12-17 |
|  10024 | 1958-09-05 | Suzette    | Pettey     | F      | 1997-05-19 |
|  10032 | 1960-08-09 | Jeong      | Reistad    | F      | 1990-06-20 |
|  10040 | 1959-09-13 | Weiyi      | Meriste    | F      | 1993-02-14 |
+--------+------------+------------+------------+--------+------------+
10 rows in set (0.00 sec)

or演算子は、「どちらか一方を満たす」という意味になり、and演算子は「どちらも同時に満たす」という意味になります。

SQLのwhere句で複数の条件の優先順位

条件式の優先順位は以下の通りです。

  1. 括弧でくくられた条件式
  2. andで接続された条件式
  3. orで接続された条件式

括弧を使うと、複雑な条件を入れ子構造にして記述することが可能です。以下の例は、emp_no(社員番号)が10001もしくは、first_name(姓名の名)がMaryかJeongでhire_date(雇用日)が1980年1月1日以降のレコードを抽出するSQLです。

mysql> select * from employees
where emp_no=10001
or (first_name = 'Mary' or first_name = 'Jeong' and hire_date > '1980-01-01' )
limit 10;

+--------+------------+------------+------------+--------+------------+
| emp_no | birth_date | first_name | last_name  | gender | hire_date  |
+--------+------------+------------+------------+--------+------------+
|  10001 | 1953-09-02 | Georgi     | Facello    | M      | 1986-06-26 |
|  10011 | 1953-11-07 | Mary       | Sluis      | F      | 1990-01-22 |
|  10032 | 1960-08-09 | Jeong      | Reistad    | F      | 1990-06-20 |
|  10337 | 1957-12-10 | Jeong      | Sadowsky   | M      | 1995-08-06 |
|  10532 | 1959-08-31 | Mary       | Wossner    | F      | 1986-05-18 |
|  10551 | 1963-10-07 | Jeong      | Rijsenbrij | M      | 1988-08-06 |
|  11821 | 1954-10-18 | Mary       | Piazza     | F      | 1995-12-13 |
|  12334 | 1962-03-08 | Mary       | Ertl       | F      | 1990-03-06 |
|  13562 | 1960-02-15 | Mary       | Cooley     | M      | 1986-02-24 |
|  13881 | 1956-08-14 | Mary       | Monarch    | F      | 1991-06-10 |
+--------+------------+------------+------------+--------+------------+
10 rows in set (0.00 sec)

【関連記事】
SQL andのサンプルSQL 複数条件の記述例と、優先順位 

where句で複雑な条件式をinで記述する方法

where句の条件式が複雑な場合、inを使って記述するとすっきり見やすくできるケースがあります。

以下の例は、first_nameとlast_nameの組み合わせが「Georgi Facello」、「Mary Wossner」、「Guoxiang Cooley」のデータを抽出する例です。

mysql> select * from employees
where (first_name, last_name) in (
('Georgi','Facello'), ('Mary','Wossner'), ('Guoxiang','Cooley')
);
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
|  10001 | 1953-09-02 | Georgi     | Facello   | M      | 1986-06-26 |
|  10532 | 1959-08-31 | Mary       | Wossner   | F      | 1986-05-18 |
|  55649 | 1956-01-23 | Georgi     | Facello   | M      | 1988-05-04 |
|  66142 | 1953-06-10 | Guoxiang   | Cooley    | M      | 1993-01-23 |
+--------+------------+------------+-----------+--------+------------+
4 rows in set (0.14 sec)

【関連記事】
SQLのwhereはinで複数条件を簡潔に記述できる サブクエリの併用も可

絞り込み対象のカラムを同時に3つ、4つと多数指定したい場合に有効です。

まとめ

ポテパンダの一言メモ
  • SQLのwhere句で複数条件指定するにはandやorで条件式を接続する
  • 条件式には優先順位があり、括弧でくくると最も優先順位が高くなる
  • 複数カラムを対象にした条件式はinを使うと簡潔に記述できるケースあり

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。