NULL値に気を付けよう!

 2023.01.11  株式会社システムインテグレータ

今回は初心者訓練所#06として、扱いに注意が必要な「NULL」値について説明していきます。SELECT文で抽出した結果では、ブランクなのかNULLなのか見分けがつかないので厄介です。データを検索する場合等に落とし穴になることがよくありますので、ハマる事のないように扱い方を理解しましょう。

NULLとは?

NULLは、ヌルまたはナルと読み、項目に何も入力されていない状態を表しています。また、文字列項目、数値項目のどちらにも設定可能です。SELECTの結果では判断し難い他の値と合わせてまとめると以下となります。

・NULL:項目に何も入力されていない状態。
・空文字:’’のように文字数が0の値がセットされている。
・半角スペース:’ ’のように半角の空白がセットされている。
・全角スペース:’ ’のように全角の空白がセットされている。

それでは、実際にtbl_employeesにデータを作成して確認してみましょう。

create table tbl_employees (emp_code integer , emp_name text , kana text , gender text , age integer , dept_code integer);
insert into tbl_employees (emp_code,emp_name,kana,gender,age,dept_code) values
('1','HoriiTaro','ホリイタロウ','','40','1'),
('2','IshimuraHana','イシムラハナ',NULL,'33','2'),
('3','KitajimaRuna','キタジマルナ',' ','45','3'),
('4','MuroiYuri','ムロイユリ',' ','27','1'),
('5','KitazawaAika','キタザワアイカ','F','33','1'),
('6','MitaniKoukiti','ミタニコウキチ','M','23','2');

sql06-01

select文で登録内容を確認してみましょう。

select * from tbl_employees;

sql06-02emp_code = 1、2,3,4それぞれのgenderには、順番に空文字、NULL、半角スペース、全角スペースがセットされています。見た目では判断が難しいと思います。全角スペースはgender以降の位置がズレていますが、他は区別が出来ないと思います。次にそんな見た目では判断できない、NULLの注意点について説明していきます。

NULLの注意点について

NULLは、そもそも何も無い存在なので他の値と扱いが異なります。
空文字やスペースのデータを抽出する場合は「=」(イコール)で判定可能ですが、NULLの項目を「=」で比較した場合は、該当データなしとなってしまいます。NULLのデータを抽出する場合は、「IS」を使用して比較しなければならないということに注意してください。

実際に、空文字を判定する場合とNULLを「=」「IS」で判定する場合を、入力して確認してみましょう。

select emp_name, gender from tbl_employees where gender = '';

 select emp_name, gender from tbl_employees where gender = NULL;

 select emp_name, gender from tbl_employees where gender IS NULL;

 

sql06-03

2つ目のクエリのように、NULLを「=」で比較してもデータが抽出されないことが確認できます。このように、空文字のデータを抽出したのに、抽出されないデータがあった場合等は、NULLを疑ってみてください。

NULLとなっている項目の抽出漏れを防ぐためには、以下の方法があります。
・条件式にORで IS NULLの条件を追加する。

select emp_name, gender from tbl_employees
where gender = '' OR gender IS NULL;

・関数を使用してNULLを置き換えて比較する。
  IFNULL関数を使用して、比較する項目の値がNULLの場合は空文字に置き換えて比較します。

select emp_name, gender from tbl_employees
where IFNULL(gender,'') = '';

実際に入力して確認してみましょう。

sql06-04

どちらのクエリも、genderが空文字とNULLのデータが表示されていることを確認できます。

また、集計関数を利用する場合にも注意が必要です。
COUNT、SUM、AVG等の関数ではNULL値の項目は集計対象外となりますので注意してください。詳細は、初心者訓練所#03でご確認ください。

おすすめの学習コンテンツ

本記事を読み終わって、さらに学びたい方、次は問題にチャレンジしてみたい方には、以下の無料コンテンツをご用意しておりますので、ぜひ活用してみてください!

SQLiteについて
・本記事で使用したデータベース「SQLite」について解説する資料です。
 SQLiteとは?他のデータベースとの違いも解説

SQLの教科書
・一般的な解説から、実際にSQLを動かす操作イメージまで幅広く解説する資料です。
 「SQLの教科書」ビックデータ時代の必須科目

SQL無料トライアルテスト
・TOPSIC-SQLの無料トライアルテストをご受験していただけます。
 TOPSIC-SQL無料トライアルテスト

SQL基礎解説YouTube
・「TOPSIC-SQL」を元にしたオンラインウェビナーです。
 SQL-BOOT CAMP #1 
 ビッグデータ時代の必須科目SQLを学ぶ「実戦で通用する武器を身につけよう!」

まとめ

本記事では、初心者訓練所の第6弾として、初心者が戸惑いやすいNULLについて説明してきました。検索結果等で何か想定と違うなと感じたら、項目のNULL値を疑ってみてください。それでは、次の初心者訓練所でまたお会いしましょう!

(株)システムインテグレータ 製品企画室 元鬼軍曹 久保 司


RELATED POST関連記事


RECENT POST「SQL‐BOOTCAMP」の最新記事


SQL‐BOOTCAMP

SQLのEXISTS句とサブクエリで存在チェック!

SQL‐BOOTCAMP

SQLの便利な関数(NULLIF、IIF)を使ってみよう!

SQL‐BOOTCAMP

SQLのNULLを扱う関数(IFNULL、COALESCE)を使ってみよう!

SQL‐BOOTCAMP

SQLの日付・時間関数(DATE、TIME、DATETIME、JULIANDAY、STRFTIME)を使ってみよう!

NULL値に気を付けよう!

TOPSIC TOPへ