NULLを含むWHERE条件を練習する

入門 | 10分 で読める | 2026.06.17

公式ドキュメント

今回やること

この記事では、NULL を含むデータを用意し、IS NULLIS NOT NULLCOALESCE を練習します。

NULLは = で比較せず、IS NULL で判定します。

前提条件

  • SQLを実行できる学習用データベースがある
  • SELECTWHERE の基本を知っている
  • 本番データではなく練習用テーブルで試す

Step 1: 練習用テーブルを作る

CREATE TABLE profiles (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  nickname TEXT,
  bio TEXT,
  deleted_at DATE
);

nicknamebiodeleted_atNULL を許可します。

Step 2: 練習データを入れる

INSERT INTO profiles (id, name, nickname, bio, deleted_at) VALUES
  (1, 'Sato', 'sat', 'SQLを勉強中', NULL),
  (2, 'Suzuki', NULL, 'データベースが好き', NULL),
  (3, 'Tanaka', '', NULL, NULL),
  (4, 'Yamada', 'yama', NULL, '2026-02-01'),
  (5, 'Kato', NULL, '', NULL);

ここでは、NULL と空文字 '' の両方を入れています。

Step 3: NULLの行を探す

ニックネームが未設定の行を取得します。

SELECT id, name, nickname
FROM profiles
WHERE nickname IS NULL;

この結果には、nickname が本当に NULL の行だけが出ます。空文字の行は含まれません。

Step 4: NULLではない行を探す

SELECT id, name, nickname
FROM profiles
WHERE nickname IS NOT NULL;

この結果には、空文字 '' も含まれます。空文字は NULL ではなく、値が入っている状態だからです。

Step 5: 間違いやすい書き方を確認する

次のSQLは、期待通りに NULL を探せません。

SELECT id, name, nickname
FROM profiles
WHERE nickname = NULL;

NULL は通常の値ではないため、= で比較しません。

= NULL!= NULL は初心者がよく書くミスです。NULL判定は常にISを使います。

Step 6: 空文字とNULLを分ける

空文字だけを探す場合は、通常の比較を使います。

SELECT id, name, nickname
FROM profiles
WHERE nickname = '';

未設定を NULL として扱うか、空文字として扱うかは、設計段階で決めておく必要があります。

Step 7: COALESCEで表示を整える

NULL のままだと画面表示や集計で扱いにくいことがあります。表示用には COALESCE が使えます。

SELECT
  id,
  name,
  COALESCE(nickname, '未設定') AS display_nickname
FROM profiles;

nicknameNULL の場合だけ '未設定' が表示されます。空文字は空文字のままです。

Step 8: 退会していないユーザーを探す

deleted_atNULL の行を、退会していない状態として扱います。

SELECT id, name, deleted_at
FROM profiles
WHERE deleted_at IS NULL;

退会済みのユーザーは次のように取れます。

SELECT id, name, deleted_at
FROM profiles
WHERE deleted_at IS NOT NULL;

よくあるエラー

エラーよくある原因確認すること
NULLの行が取れない= NULL と書いているIS NULL に直す
空文字も未設定扱いにしたいNULLと空文字を分けていないnickname IS NULL OR nickname = '' を検討
COALESCE が効かない空文字をNULLだと思っている対象値が本当にNULLか確認
退会済み判定が逆IS NULL / IS NOT NULL の意味を取り違えているdeleted_at の設計を確認

まとめ

NULLIS NULL / IS NOT NULL で判定します。空文字や0とは別物です。表示だけ整えたい場合は COALESCE を使えますが、データ設計としてNULLを許可するかどうかは別に決める必要があります。

参考リソース

← 一覧に戻る
PR
PR
PR
PR