連載 [第2回] :
  初心者のための SQL-BOOTCAMP

よく利用される便利な「句」の紹介とクセ者「NULL」について

2022年11月15日(火)
久保 司

(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でまた、お会いしましょう!

株式会社システムインテグレータ
長年にわたり、基幹システム構築プロジェクトにおいて全工程を経験。その際、OracleやSQLServer等のDBMSでSQLを使用したプログラム開発を実施。現在は、製品企画室でスキル判定サービス「TOPSIC-SQL」のコンテンツ作成を主に担当。

連載バックナンバー

データベース技術解説
第10回

実践! 「TOPSIC SQL CONTEST」の練習問題にチャレンジしよう

2023/7/25
最終回となる今回は、これまでの訓練の成果を計るために、SQLの腕試しができるオンラインコンテスト「TOPSIC SQL CONTEST(TSC)」の練習問題にチャレンジしてみましょう。
データベース技術解説
第9回

神出鬼没!サブクエリについて(Part.2)

2023/6/29
第9回となる今回は、前回に引き続き、SQL文の中でも神出鬼没でさまざまな出現パターンを持つサブクエリについて解説していきます。
データベース技術解説
第8回

神出鬼没! サブクエリについて(Part.1)

2023/5/30
第8回となる今回からは、SQL文の中でも神出鬼没でさまざまな出現パターンを持つサブクエリについて解説していきます。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています