SQLにおいて、NULLは「値が存在しない」ことを示す特殊な値です。直感的には「空」や「ゼロ」と混同されがちですが、SQLでは別物として扱われるため、適切な条件分岐が必要です。本記事では、NULLを含むカラムに対する検索や条件指定の方法について解説します。
NULLの基本的な考え方
SQLでは、NULLは「不明な値」という扱いです。そのため、通常の比較演算子(=, !=, <, >など)では正しく比較できません。
例えば、以下のようなクエリは何も結果を返しません。
SELECT * FROM users WHERE email = NULL;
このような場合、NULLの判定には専用の構文が必要です。
NULLを含むレコードを抽出する(IS NULL)
NULLの値を持つレコードを取得したい場合は、IS NULLを使います。
SELECT * FROM users WHERE email IS NULL;
このクエリは、「emailが未登録」のユーザーを抽出します。
NULL以外のレコードを抽出する(IS NOT NULL)
逆に、値が入っているレコードだけを抽出したい場合は、IS NOT NULLを使います。
SELECT * FROM users WHERE email IS NOT NULL;
NULLを含めた条件分岐(ORとの組み合わせ)
NULLを含めた複合条件を扱う場合、ORやCOALESCEといった構文を組み合わせると便利です。
-- 年齢が20歳以上、もしくは未入力(NULL)の人
SELECT * FROM users WHERE age >= 20 OR age IS NULL;
NULLを他の値に置き換えて扱う(COALESCE関数)
NULLを別の値に置き換えて扱いたい場合は、COALESCE()関数を使うと便利です。
-- 表示用にNULLを「未入力」として扱う
SELECT name, COALESCE(email, '未入力') AS email_display FROM users;
CASE式でNULLを条件分岐に使う
SELECT
name,
CASE
WHEN email IS NULL THEN 'メール未登録'
ELSE 'メール登録済み'
END AS email_status
FROM users;
まとめ
条件 | 使用する構文 |
---|---|
値がNULL | IS NULL |
NULL以外 | IS NOT NULL |
NULLを特定の値に置き換えたい | COALESCE(カラム, 値) |
条件ごとに分けて表示したい | CASE WHEN |
NULLは見落とすとバグの原因になることが多いため、正しい扱いを理解しておくことが重要です。特に検索条件やデータ表示の場面では、IS NULLやCOALESCEを適切に使い分けましょう。