データベース応用コース3/9
CASEを使ってみよう
このシナリオではCASE式の使い方について学んでいきます。
CASE式とは
CASE式とはSQL文において条件分岐の役割を果たす構文のことを表します。
条件分岐とは「もし〇〇の場合には▲▲をする」という意味を表す言葉です。
MySQL内においてCASE式を使うことによって例えば、もし会社員の役職がプログラマーだった場合には役職をコーダーに変更するといった、条件分岐の伴ったデータの更新処理を行うことも可能になります。
また、CASE文には2種類の書き方が存在します。
- 単純CASE式
- 検索CASE式
前者の場合は書き方が簡潔である代わりにできることが限られ、後者の場合は書き方が難しい代わりに前者と比べて柔軟な処理を行うことが可能です。このシナリオでは後者の検索CASE式について詳しく説明します。
検索CASE式の書き方
まずは検索CASEの基本的な書き方について理解しましょう。
CASE member
WHEN カラムの名前 = '条件の値1' THEN '表示したい名前1'
WHEN カラムの名前 = '条件の値2' THEN '表示したい名前2'
WHEN カラムの名前 = '条件の値3' THEN '表示したい名前3'
ELSE '上記のどれにも当てはまらない場合に表示したい名前' END
CASE
の後には対象のテーブルの名前を書きます。
そしてその後にはWHEN カラムの名前 = ‘条件の値’
、その後にTHEN ‘表示したい名前’
を書きます。
また、ELSE
を書くことで条件全てに当てはまらないその他の場合の処理を行うことができます。
CASE式を書く際には最後にEND
を付けることも忘れずにしましょう。
SELECT + CASEの組み合わせ
SELECT文とCASE式を合わせてデータを取得することができます。
例えば会社の役職に応じて表示する名前を変えるSQL文を以下のように書くとしましょう。
会社員のデータを格納するテーブルをmember、会社の役職を表すカラムをroleとします。
SELECT CASE role
WHEN 'programmer' THEN '開発者'
WHEN 'designer' THEN 'UI/UXデザイナー'
WHEN 'manager' THEN 'PM'
ELSE 'メンバー' END AS role_jp, COUNT(id) FROM member GROUP BY role_jp;
上記のCASE式ではroleというカラムの値に応じて名前を変更し、role_jpという新しいカラムとして表示させています。
例えばroleがprogrammerの場合には開発者となり、role_jpカラムに表示されます。
仮に条件全てに当てはまらない場合はメンバーとなり、role_jpカラムに表示されます。
また、GROUP BY
句によってrole_jpの値ごとにグループ分けを行い、それらの合計をCOUNT
を用いて抽出しています。つまり、開発者やUI/UXデザイナーそれぞれの合計数を求めることができます。
UPDATE + CASEの組み合わせ
UPDATE文とCASE式を合わせることもできます。
memberテーブルのsalary(給与)の値を、roleの名前を条件に更新するSQL文を以下のように書きます。
UPDATE member SET salary = CASE
WHEN role = 'programmer' THEN 500000
WHEN role = 'designer' THEN 300000
ELSE salary end;
上記のSQL文を実行すると、roleがprogrammerの場合はsalaryが500000に、roleがdesignerの場合はsalaryが300000に変更されます。それ以外の役職はsalaryと指定されているので、現状のsalaryの値がそのまま適用されます。
まとめ
このようにCASE式を使うことで条件によってSQLで行う処理を分けることができます。
CASE式は扱いが難しいものではありますが、使いこなすことでより柔軟な処理を行うことができるのでこの機会に是非理解しておきましょう。
問題を解くためには、十分な画面サイズのPC環境をご利用下さい。