SQL - NULL値の理解: 知らないことの理解
こんにちは、未来のデータベースの魔術師たち!今日は、SQLの非常に興味深い側面についてお話しします。それは、初心者がよく困るNULL値についてです。コードを書いたことがない方も心配しないでください。私はこの概念をステップバイステップでガイドします。これまでに何人もの生徒を指導してきました。お気に入りの飲み物を一杯取り、一緒にSQLの冒険に乗り出しましょう!
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」というテーブルを作成しています。以下のように分解してみましょう。
-
StudentID
、FirstName
、LastName
、Age
はすべてNOT NULL
として宣言されています。これは、これらのフィールドには値が必須であることを意味します。空白のままにすることはできません。 -
Email
フィールドにはNOT NULL
がありません。これは、学生がメールアドレスを提供しなくても良いという意味です。
NOT NULL
を使用することで、私たちはデータベースに「この情報は必須です。理由はありません」と伝えています。
テーブル内のNULL値を更新
時々、テーブル内のNULL値を更新したい場合があります。それをどのようにするかを見てみましょう。
例2: NULLメールアドレスの更新
例えば、全学生のメールアドレスが必要だと気づいたとします。NULLのメールアドレスを更新するには以下のようになります。
UPDATE Students
SET Email = '[email protected]'
WHERE Email IS NULL;
このクエリは以下のように動作します。
- 「Students」テーブルを見ます。
-
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