PostgreSQLのIS NULL・IS NOT NULL完全入門|WHERE句で空のデータを正しく検索する方法
生徒
「PostgreSQLでデータを検索していたら、何も入っていないデータがあって、どう探せばいいのか分からなくなりました」
先生
「それはNULLと呼ばれる特別な状態ですね。IS NULLやIS NOT NULLを使うと、空のデータを正しく探せます」
生徒
「パソコンが苦手でも理解できますか?」
先生
「大丈夫です。紙の名簿で空欄を探すイメージで説明します」
1. SQLとは何か?
SQLは、データベースに保存されている情報を操作するための言葉です。データベースは、たくさんの情報を表の形で整理して保管する仕組みです。SQLを使うことで、その表の中から必要な情報だけを探し出せます。
例えば、会員名簿の中からメールアドレスが登録されていない人を探したい場合、人の目で一行ずつ見るのは大変です。SQLを使えば、その条件を文章のように書くだけで、コンピューターが自動で探してくれます。
2. NULLとは何かを初心者向けに理解しよう
NULLとは、「値が入っていない状態」を表す特別なものです。空文字やゼロとは違い、「まだ何も決まっていない」「情報が存在しない」という意味を持ちます。
紙の名簿で例えると、何も書かれていない空欄がNULLです。ゼロや空白文字とは違い、「未記入」であることを表します。PostgreSQLでは、このNULLを特別に扱う必要があります。
3. IS NULLで空のデータを検索する
IS NULLは、値が入っていないデータだけを探すための書き方です。「この列が空欄の行を表示してください」という意味になります。
usersテーブル(SQL実行前)
id | name | age | email
---+------------+-----+-------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 |
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋次郎 | 22 |
5 | 伊藤美咲 | 28 | misaki@example.com
SELECT *
FROM users
WHERE email IS NULL;
このSQLは、「メールアドレスが登録されていない人だけを表示してください」という意味になります。
実行結果
id | name | age | email
---+------------+-----+-------------------
2 | 佐藤花子 | 19 |
4 | 高橋次郎 | 22 |
4. IS NOT NULLで値が入っているデータを探す
IS NOT NULLは、IS NULLの反対です。「空ではないデータ」を探すために使います。きちんと情報が入力されている行だけを確認したいときに便利です。
SELECT *
FROM users
WHERE email IS NOT NULL;
これは「メールアドレスが登録されている人だけを表示してください」という意味です。名簿で連絡先が書かれている人だけを抜き出す感覚に近いです。
5. なぜ = NULL では検索できないのか
初心者がよく間違えるのが、「email = NULL」と書いてしまうことです。NULLは普通の値ではないため、イコールで比べることができません。
NULLは「分からない状態」なので、「これと同じですか?」と聞いても答えが出ません。そのため、PostgreSQLではIS NULLという専用の書き方が用意されています。
6. WHERE句と組み合わせた実践的な使い方
IS NULLやIS NOT NULLは、他の条件と一緒に使うこともできます。例えば「20歳以上で、メールアドレスが未登録の人」を探すことも可能です。
SELECT *
FROM users
WHERE age >= 20
AND email IS NULL;
これは、条件を二つ同時に満たす人を探しています。紙の名簿で条件に印を付けていくイメージで考えると分かりやすいです。
7. IS NULLを使う場面と注意点
IS NULLは、未入力チェックや、登録漏れの確認などでよく使われます。会員登録やアンケート結果を確認するときに特に重要です。
ただし、NULLと空文字は別物です。見た目は同じ空欄でも、内部的には違う扱いになる場合があります。初心者のうちは「NULLは特別な空欄」と覚えておくと十分です。
8. NULLを正しく扱えると検索が正確になる
PostgreSQLのIS NULLとIS NOT NULLを理解すると、データベース検索の精度が一気に上がります。空のデータを意識せずに検索すると、必要な情報を見逃してしまうことがあります。
名簿の空欄を探す感覚で考えると、IS NULLはとても自然な考え方です。まずは基本の使い方をしっかり身につけることが大切です。