SQL - NULL値の理解: 知らないことの理解

こんにちは、未来のデータベースの魔術師たち!今日は、SQLの非常に興味深い側面についてお話しします。それは、初心者がよく困るNULL値についてです。コードを書いたことがない方も心配しないでください。私はこの概念をステップバイステップでガイドします。これまでに何人もの生徒を指導してきました。お気に入りの飲み物を一杯取り、一緒にSQLの冒険に乗り出しましょう!

SQL - NULL Values

NULL値とは何か?

本題に入る前に、まずSQLでNULLが実際に何を意味するかを理解しましょう。フォームに記入しているとします。その中に「中間名」の項目がありますが、あなたの中間名がない場合どうしますか?「中間名なし」と書くと正確ではありません。なぜなら、あなたの中間名が「中間名なし」であることを言っているわけではありません。単に空白のままにします。その空白が、SQLでのNULLとは基本的に同じ意味です。

SQLでは、NULLはデータベース内に存在しないデータ値を示す特別なマーカーです。これはゼロでも、空の文字列でもありません。何かの値が存在しないことを示します。これをSQLが「私は知らない」または「この情報は利用できない」と言う方法だと考えられます。

NULL値を許可しないテーブルの作成

NULL値が何であることを理解したので、NULL値を許可しないテーブルを作成する方法を見てみましょう。これは、各レコードで必須のデータを持つ場合に特に便利です。

例1: 学生テーブルの作成

CREATE TABLE Students (
StudentID INT NOT NULL,
FirstName VARCHAR(50) NOT NULL,
LastName VARCHAR(50) NOT NULL,
Age INT NOT NULL,
Email VARCHAR(100)
);

この例では、「Students」というテーブルを作成しています。以下のように分解してみましょう。

  1. StudentIDFirstNameLastNameAgeはすべてNOT NULLとして宣言されています。これは、これらのフィールドには値が必須であることを意味します。空白のままにすることはできません。
  2. EmailフィールドにはNOT NULLがありません。これは、学生がメールアドレスを提供しなくても良いという意味です。

NOT NULLを使用することで、私たちはデータベースに「この情報は必須です。理由はありません」と伝えています。

テーブル内のNULL値を更新

時々、テーブル内のNULL値を更新したい場合があります。それをどのようにするかを見てみましょう。

例2: NULLメールアドレスの更新

例えば、全学生のメールアドレスが必要だと気づいたとします。NULLのメールアドレスを更新するには以下のようになります。

UPDATE Students
SET Email = '[email protected]'
WHERE Email IS NULL;

このクエリは以下のように動作します。

  1. 「Students」テーブルを見ます。
  2. Email IS NULL= NULLを使用することはできません!)のレコードに対して、メールを'[email protected]'に設定します。

これは「メールアドレスを提供していない学生には、このプレースホルダーのメールアドレスを使用しよう」と言うことと同じです。

NULL値を持つレコードの削除

特定のフィールドにNULL値があるレコードを削除したい場合もあります。それをどのようにするかを見てみましょう。

例3: 年齢情報がない学生の削除

以下のクエリを使用して、年齢フィールドがNULLの学生レコードを削除します。

DELETE FROM Students
WHERE Age IS NULL;

このクエリは、年齢フィールドがNULLのすべての学生レコードを削除します。これは「学生の年齢を知らない場合、そのレコードをデータベースから削除しよう」と言うことと同じです。

このような操作には注意が必要です!このクエリを実行する前に、本当にこれらのレコードを削除したいかを確認してください。

WHERE句内でのNULL値の取り扱い

NULL値は通常の比較演算子では使用できません。WHERE句内でNULL値を正しくチェックする方法を見てみましょう。

例4: 欠損しているメールアドレスを持つ学生の検索

以下のクエリは、メールアドレスを提供していないすべての学生をリストアップします。

SELECT FirstName, LastName
FROM Students
WHERE Email IS NULL;

このクエリは、Email IS NULL= NULLを使用することはできません!)の学生をすべて表示します。これは経験豊富なプログラマーですら時々間違える_common_mistake_です!

NULL値と集計関数

NULL値は集計関数の動作にも影響を与えることがあります。例を見てみましょう。

例5: 平均年齢の計算

以下のクエリは、すべての学生の平均年齢を計算します。

SELECT AVG(Age) AS AverageAge
FROM Students;

このクエリは、すべての学生の平均年齢を計算します。ここで興味深いのは、NULL値はこの計算で完全に無視されます。したがって、10人の学生がいる場合でも、そのうち8人だけの年齢が記入されている場合、平均はその8人の値に基づいて計算されます。

結論

そして、皆さん!NULL値の世界をSQLで旅しました。NULLを許可しないテーブルの作成、NULL値を持つレコードの更新と削除、そしてクエリ内でのNULL値の取り扱いについて学びました。

NULLはゼロでも、空の文字列でもありません。存在しない値を示します。SQLが「私は知らない」と言う方法です。そして、あなたはこの「私は知らない」という状況をプロのように処理する方法を学びました!

これらの概念を引き続き練習し、すぐにデータベースの世界を自信満々にナビゲートするようになります。快適なクエリを楽しんでください!

方法 説明
IS NULL 値がNULLであるかどうかをチェック
IS NOT NULL 値がNULLでないかどうかをチェック
COALESCE() リスト内の最初の非NULL値を返す
IFNULL() 表現がNULLの場合に指定された値を返す
NULLIF() 二つの表現が等しい場合にNULLを返す

Credits: Image by storyset