SQL Academy · レッスン

NULL:第3の真理値

NULLの意味、NULLが何とも等しくない理由(自身とも等しくありません)、そして三値論理がWHERE句に与える影響を身につけます。

レッスン 3/413 ステップ

「NULL:第3の真理値」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。

NULLとは何ですか

NULLは不明または欠落しているデータを表します。ゼロでも、空文字列でも、falseでもありません。値が存在しないことを明示的に表します。

NULLは何とも等しくありません(自分自身とも等しくありません)

これは、誰もがつまずきやすいルールです。

SELECT NULL = NULL;       -- NULL (not true!)
SELECT NULL = 0;          -- NULL
SELECT NULL = '';        -- NULL
SELECT NULL <> 1;         -- NULL

IS NULLとIS NOT NULLを使う

NULLかどうかを確認するには、特殊な述語であるIS NULLとIS NOT NULLを使う必要があります。

SELECT email FROM users WHERE deleted_at IS NULL;       -- active users
SELECT email FROM users WHERE deleted_at IS NOT NULL;   -- deleted users

3値論理

SQLのブール論理には、TRUE、FALSE、UNKNOWN (NULL)の3つの値があります。

ABA AND BA OR B
TRUENULLNULLTRUE
FALSENULLFALSENULL
NULLNULLNULLNULL

WHEREは述語がNULLの行を除外します

ある行でWHERE x = 5の評価結果がNULLになる場合(xがNULLの場合)、その行は返されません。残るのは、述語がTRUEになる行だけです。

-- Suppose age is NULL for some users:
SELECT * FROM users WHERE age >= 18;
-- Users with NULL age are NOT returned, even though we
-- don't actually know they're under 18.

NOT INにおけるNULLの落とし穴

サブクエリ内の名前にNULLが1つでも含まれていると、このクエリは0行を返します。

SELECT * FROM users
WHERE name NOT IN (SELECT excluded_name FROM blocklist);
-- If blocklist has a NULL row, the whole NOT IN evaluates to NULL
-- → no rows returned

-- Safer:
SELECT * FROM users u
WHERE NOT EXISTS (
  SELECT 1 FROM blocklist b WHERE b.excluded_name = u.name
);

COALESCE:NULLをデフォルト値に置き換える

COALESCEは、NULLではない最初の引数を返します。

SELECT id, COALESCE(full_name, email, 'Anonymous') AS display_name
FROM users;

-- If full_name is NULL, use email; if that's NULL too, use 'Anonymous'.

NULLIF:反対の動作

NULLIF(a, b)は、a = bの場合にNULLを返し、それ以外の場合はaを返します。''や0のようなセンチネル値をNULLとして扱う場合に便利です。

SELECT NULLIF(price, 0) FROM products;
-- Returns NULL when price is 0, useful for AVG() that should ignore zeros.

集約関数におけるNULL

COUNT(*)を除く集約関数は、NULLの入力をスキップします。

-- Suppose:  prices = [10, 20, NULL, 30]
SELECT COUNT(*)     FROM products;  -- 4 (counts rows)
SELECT COUNT(price) FROM products;  -- 3 (counts non-NULL prices)
SELECT AVG(price)   FROM products;  -- 20  (60 / 3, not 60 / 4)
SELECT SUM(price)   FROM products;  -- 60

NULLの並べ替え順

デフォルトでは、PostgreSQLは昇順の場合にNULLを最後に、降順の場合に最初に並べます。これを上書きすることもできます。

SELECT * FROM users ORDER BY last_login_at DESC NULLS LAST;

NULLと空文字列の保存

列ごとに、''が有効な値かどうかを決めます。有効でない場合は、「値なし」をNULLで表します。有効な場合、NULLは別の意味(例:「まだ尋ねていない」)を持ちます。

一貫性を保ち、同じ列で両方を混在させないでください。

まとめ

NULLは独自の真理値です。

  • IS NULLで確認し、決して= NULLとは書きません
  • WHEREによるフィルタリングでは、TRUEの行だけが残ります
  • 集約関数はNULLの入力をスキップします
  • COALESCEは便利な機能です

確認問題

SELECT NULL = NULL;は何を返しますか。

無料で開始

AI チューターと学ぶ SQL — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
46
レッスン
183

よくある質問

「NULL:第3の真理値」レッスンは無料ですか?

はい。「NULL:第3の真理値」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。

「NULL:第3の真理値」で何を学びますか?

NULLの意味、NULLが何とも等しくない理由(自身とも等しくありません)、そして三値論理がWHERE句に与える影響を身につけます。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

SQL Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「NULL:第3の真理値」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSQL Academyレッスンでコードを書いて実行できますか?

はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. RDBMSとは何か、なぜテーブルが重要か
  2. 主キーと一意性
  3. NULL:第3の真理値
  4. データ型の概要:INT VARCHAR DATE BOOLEAN
← SQL Academyに戻る