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

SQLのcase whenについてまとめています。

SQL case whenの構文

mysql>SELECT * 
FROM   employees 
WHERE  ( 
              CASE 
                     WHEN first_name='Georgi' 
                     AND    last_name='Facello' THEN 'CHECK' 
              END) = 'CHECK';

+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
|  10001 | 1953-09-02 | Georgi     | Facello   | M      | 1986-06-26 |
|  55649 | 1956-01-23 | Georgi     | Facello   | M      | 1988-05-04 |
+--------+------------+------------+-----------+--------+------------+
2 rows in set (0.12 sec)

case when~という記述方法は、case式の記述方法の一種で「検索case式」と呼ばれるものです。

上記の例では、やや回りくどいのですが、first_name=Georgi、last_name=Facelloのデータの場合に’CHECK’=’CHECK’が真となりselectの抽出対象となるように記述しています。

【関連記事】
SQLのcaseはクエリ内に条件分岐を組み込む 単純case式、検索case式あり

SQLのcase when(検索case式)の使い方

単純case式と比べると、検索式の記述方法は、より複雑な条件を組み込むことが可能です。

SELECT employees.first_name, 
       employees.last_name, 
       CASE 
         WHEN dept_emp.from_date < '1999-01-01' 
              AND dept_emp.to_date = '9999-01-01' THEN 'employment' 
         WHEN dept_emp.to_date != '9999-01-01' THEN dept_emp.to_date 
         ELSE 'employement' 
       end AS zaishoku 
FROM   dept_emp, 
       employees 
WHERE  employees.emp_no > 10100 
       AND dept_emp.emp_no = employees.emp_no 
LIMIT  10; 

+------------+------------+-------------+
| first_name | last_name  | zaishoku    |
+------------+------------+-------------+
| Perla      | Heyers     | 2000-09-23  |
| Paraskevi  | Luby       | employment  |
| Akemi      | Birch      | employment  |
| Xinyu      | Warwick    | employment  |
| Hironoby   | Piveteau   | 2001-06-11  |
| Eben       | Aingworth  | employment  |
| Dung       | Baca       | employement |
| Lunjin     | Giveon     | 2001-10-20  |
| Lunjin     | Giveon     | 1999-12-06  |
| Mariusz    | Prampolini | employment  |
+------------+------------+-------------+
10 rows in set (0.11 sec)

【関連記事】
SQLのwhereはcase式で条件切替が可能 条件の有り・無しを記述できる 

なお、case式はselect文のカラムだけではなく、where内でも使用可能です。以下のSQLは、emp_no(社員番号)が10010以下の場合はfirst_nameがSで始まるデータを、それ以外はすべて(case式の値

1で、常に真)のデータを出力します。

mysql>SELECT * 
FROM   employees 
WHERE 
       CASE 
              WHEN emp_no < 10010 THEN first_name LIKE 'S%' 
              ELSE 1 
       END limit 10;

+--------+------------+------------+-------------+--------+------------+
| emp_no | birth_date | first_name | last_name   | gender | hire_date  |
+--------+------------+------------+-------------+--------+------------+
|  10008 | 1958-02-19 | Saniya     | Kalloufi    | M      | 1994-09-15 |
|  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 |
|  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 |
+--------+------------+------------+-------------+--------+------------+
10 rows in set (0.00 sec)

まとめ

ポテパンダの一言メモ
  • case whenで記述する検索case式では、複雑な条件を記述可能
  • whereにcase式で条件分岐し、値が1となる場合は条件なし=全データ対象という条件になる
  • case式はselectのカラム指定だけではなく、where内にも記述可能。

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

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

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

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

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

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

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

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

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

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

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