【SQL入門】データベースでのNULL値の扱い|SQL Bolt⑧ 和訳・演習解答

NULL値の扱い方

本記事では、海外のSQL学習サイト【SQL Bolt】を利用して、データベース初心者向けにSQLの基本を解説します。

第8回は「SQL Lesson 8: A short note on NULLs」、SQLデータベースにおけるNULL値の扱い方についてです。

今回のポイント
  • データベースでは、NULL値が存在しないことが望ましい
  • 外部結合(OUTER JOIN)によってNULL値が生じることがある
  • WHERE 列名a IS/IS NOT NULL」で列名aの値がNULLか/NULLでないか判定できる

外部結合については前の記事で解説しています↓
合わせて読んでみてください。

目次

ざっくり日本語訳

まず、データベースではNULL値の使用はできるだけ避けましょう

理由は、データベース内にNULL値が存在する可能性がある場合、クエリや制約条件、結果の処理のときに特別な注意が必要になるからです。

こむぎ

データベース内にNULL値が存在するかしないかで、動作が異なる関数もあります

NULL値を使う代わりに、数値データには0、テキストデータには空文字列など、データ型に応じたデフォルト値を設定することができます。

しかし、データベースが不完全なデータを保存する必要がある場合、デフォルト値が後の分析に影響を与えるのなら、NULL値を使う方が良いこともあります。たとえば「分析の際に、数値データの平均を取りたい!」といった場合ですね。

NULL値と0とでは、データとしての意味が全く違うということです

また、Lesson7で見たように、非対称なデータを持つ2つのテーブルを外部結合する際にNULL値を避けられないこともあります。

(例) Lesson7の練習問題3問目

外部結合(OUTER JOIN)によって、「Role」の列にNULL値が生じています。

外部結合でNULL値が発生する例
外部結合でNULL値が発生する例

このような場合、「IS NULL」制約または「IS NOT NULL」制約を使って、WHERE句でNULL値を判定することができます。

記述する順番

SELECT DISTINCT 列名1, 列名2, …
FROM テーブル1
WHERE 列名a IS/IS NOT NULL
AND/OR 条件
AND/OR …;

条件の意味

WHERE 列名a IS NULL列名aの値がNULLの場合
WHERE 列名a IS NOT NULL列名aの値がNULLでない場合

演習問題の和訳・解答

1. Find the name and role of all employees who have not been assigned to a building

【和訳】ビルに配属されていない全従業員の名前と役割を探してください。

SELECT Employees.Name, Employees.Role FROM Employees
    LEFT JOIN Buildings
        ON Employees.Building = Buildings.Building_name
    WHERE Employees.Building IS NULL;
2. Find the names of the buildings that hold no employees

【和訳】従業員が1人も所属していないビルの名前を探してください。

SELECT * FROM Buildings
    LEFT JOIN Employees
        ON Buildings.Building_name = Employees.Building
    WHERE Employees.Name IS NULL;
NULL値の扱い方

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次