よく利用される便利な「句」の紹介とクセ者「NULL」について
(3)CASE句
使用例のCASE
句では、「gender」の値が「F」の場合は「女」と表示し、それ以外の場合は「男」と表示するよう記述されています。結果として「KITAJIMA RUNA」の「gender」の値が半角ブランクですが「男」と表示されています。
「gender」の値が「F」「M」の2種類のみの場合は良いのですが、2種類以外の値が入っている場合は、期待していたものと違う結果が表示されてしまいます。
ここで、社員テーブル(tbl_employees
)を使用して説明していきたいので、図の[サンプルデータ]のように社員テーブルの内容を変更したいと思います。前述と同様に、下記のDELETEコマンドで社員テーブルの全データを削除し、INSERTコマンドで新たにデータを挿入してみましょう。
DELETE FROM tbl_employees;
INSERT INTO tbl_employees (code,name,kana,gender,birthday) VALUES ('1','HORII SEITARO','ホリイセイタロウ','M','1970-12-27') ,('2','ISHIMURA HANA','イシムラハナ','F','1981-08-24') ,('3','KITAJIMA RUNA','キタジマルナ',' ','1981-11-09');
挿入したデータを確認します。
SELECT * FROM tbl_employees;
それでは、先ほどの使用例のCASE
句を実際に入力して確認してみましょう。
SELECT name ,CASE WHEN gender = 'F' THEN '女' ELSE '男' END AS gen FROM tbl_employees;
図の結果と同じ値になっています。次に、「gender」の値を考慮したCASE
句を見てみます。
「gender」の値が「F」の場合、「M」の場合、それ以外の場合で分岐しています。また[別の記載例]にあるように、CASEの後に判定する項目を記載して、WHENの条件式を省略して値を直接記入することもできるので、覚えておいてください。
実際に、別の記載例を入力して確認してみましょう。
SELECT name ,CASE gender WHEN 'F' THEN '女' WHEN 'M' THEN '男' ELSE '未入力' END AS gen FROM tbl_employees;
「gender」が「F」「M」以外の場合は「未入力」と表示されています。
クセ者の「NULL」について
ここでまた、説明用に社員テーブル(tbl_employees
)の内容を入れ替えたいと思います。前述と同様に、下記のDELETEコマンドで社員テーブルの全データを削除し、INSERTコマンドで新たにデータを挿入してみましょう。
DELETE FROM tbl_employees;
INSERT INTO tbl_employees (code,name,kana,gender,birthday) VALUES ('1','HORII SEITARO','ホリイセイタロウ','','1970-12-27') ,('2','ISHIMURA HANA','イシムラハナ',NULL,'1981-08-24') ,('3','KITAJIMA RUNA','キタジマルナ',' ','1981-11-09') ,('4','MUROI YURI','ムロイユリ',' ','1982-02-12');
社員テーブルの内容を確認してみましょう。
SELECT * FROM tbl_employees;
「gender」の値を見ると、下図の[サンプルデータ]の値と同じになっていますが、SELECTした結果の見た目では区別がつきません。
図の左側の[genderが空文字のデータを抽出]のように、空文字やブランクのデータを比較する場合は「=」(イコール)で判定可能ですが、右側の[genderがNULLのデータを抽出]のようにNULLの項目を「=」で比較した場合は、該当データなしとなってしまいます。NULLのデータを抽出する場合は「is」を使用して比較しなければならないことに注意してください。
実際に、空文字を判定する場合と、NULLを「=」「is」で判定する場合とを入力して、確認してみましょう。
NULLを「=」で比較してもデータが抽出されないことが確認できます。また、ブランクのデータを抽出したのに抽出されないデータがあった場合等は、NULLを疑ってみてください。
おわりに
今回は、よく使われる3つの句および、初めは扱いに戸惑いそうなNULLについて説明しました。途中でDELETEやINSERTも複数登場してきたので、データ操作にも大分慣れていただけたのではないでしょうか。
次回以降も、さらに訓練を積んでいきたいと考えていますので、皆さんも時間があるときには訓練場で自主練習をしてみてください。それでは、次回のBOOTCAMPでまた、お会いしましょう!