【SQL】NULLを含むカラムでの条件分岐・フィルターの書き方

【SQL】NULLを含むカラムでの条件分岐・フィルターの書き方 SQL

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を適切に使い分けましょう。