NULL:第3の真理値
NULLの意味、NULLが何とも等しくない理由(自身とも等しくありません)、そして三値論理がWHERE句に与える影響を身につけます。
「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; -- NULLIS 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 users3値論理
SQLのブール論理には、TRUE、FALSE、UNKNOWN (NULL)の3つの値があります。
| A | B | A AND B | A OR B |
|---|---|---|---|
| TRUE | NULL | NULL | TRUE |
| FALSE | NULL | FALSE | NULL |
| NULL | NULL | NULL | NULL |
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; -- 60NULLの並べ替え順
デフォルトでは、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フィードバックを取得できます。ローカル設定は不要です。