Webサイト制作コースのお申し込みはこちら

SQLのwhereにcase式を使うサンプルをまとめてます。

MySQLのサンプルデータベースEmployeesを使用しています。

SQLのwhereでcase式を使って条件の切り替えが可能

where句でcase式を使うと、条件指定を切り替えることが可能です。

【関連記事】
SQLのCASE式サンプル集 order byやgroup byとの組み合わせもバッチリ

例えば、カラム名を指定する箇所をcase式で置き換えることで、条件対象カラムを切り替えることが可能です。

以下のサンプルでは、gender(性別)がM(男性)の場合はbirth_date(誕生日)、F(女性)の場合はhire_date(雇用日)が1970年1月1日以降のデータを10件表示します。

mysql> select * from employees 
where 
case when gender="M" then birth_date when gender="F" then hire_date end
 > '1970-01-01' limit 10;
+--------+------------+------------+------------+--------+------------+
| emp_no | birth_date | first_name | last_name  | gender | hire_date  |
+--------+------------+------------+------------+--------+------------+
|  10002 | 1964-06-02 | Bezalel    | Simmel     | F      | 1985-11-21 |
|  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 |
|  10010 | 1963-06-01 | Duangkaew  | Piveteau   | F      | 1989-08-24 |
|  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 |
+--------+------------+------------+------------+--------+------------+
10 rows in set (0.00 sec)

条件の有無をcase式で記述するサンプル

対象カラムだけではなく、条件の有り・無しの切り替えも可能です。

以下のサンプルは、emp_no(社員番号)が10010未満の場合はfirst_name(名)がBから始まるという条件を追加し、それ以外は条件なしでemployees(社員)テーブルから10件取得する例です。

mysql> select * from employees 
where case when emp_no < 10010 then first_name like 'B%' 
else 1 
end limit 10;
+--------+------------+------------+-------------+--------+------------+
| emp_no | birth_date | first_name | last_name   | gender | hire_date  |
+--------+------------+------------+-------------+--------+------------+
|  10002 | 1964-06-02 | Bezalel    | Simmel      | F      | 1985-11-21 |
|  10010 | 1963-06-01 | Duangkaew  | Piveteau    | F      | 1989-08-24 |
|  10011 | 1953-11-07 | Mary       | Sluis       | F      | 1990-01-22 |
|  10012 | 1960-10-04 | Patricio   | Bridgland   | M      | 1992-12-18 |
|  10013 | 1963-06-07 | Eberhardt  | Terkki      | M      | 1985-10-20 |
|  10014 | 1956-02-12 | Berni      | Genin       | M      | 1987-03-11 |
|  10015 | 1959-08-19 | Guoxiang   | Nooteboom   | M      | 1987-07-02 |
|  10016 | 1961-05-02 | Kazuhito   | Cappelletti | M      | 1995-01-27 |
|  10017 | 1958-07-06 | Cristinel  | Bouloucos   | F      | 1993-08-03 |
|  10018 | 1954-06-19 | Kazuhide   | Peha        | F      | 1987-04-03 |
+--------+------------+------------+-------------+--------+------------+
10 rows in set (0.00 sec)

else 1とすることで、emp_noが10010以上の場合は無条件で真となります。

具体的には、emp_noが10010未満の場合は以下のSQLに置き換えられます。

mysql> select * from employees 
where first_name like 'B%'

emp_noが10010以上の場合は、以下のSQLに置き換えられます。無条件でselectすることになります。

mysql> select * from employees 
where 1

SQLだけで複雑な条件分岐が実現できるんですね。

まとめ

ポテパンダの一言メモ
  • case式でwhere句の条件を切り替え可能
  • カラム名記述箇所にcase式を記述すると対象カラムを切り替えることができる
  • 条件自体の有無をcase式で指定することも可能

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

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

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

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

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

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

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

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

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

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

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