PostgreSQLでNULLを判定する方法|IS NULLの使い方と注意点

※ この記事にはアフィリエイトリンクが含まれます

PostgreSQLでデータを検索していると、「NULLを判定したい」という場面に遭遇することがあります。

例えば、次のようなケースです。

  • 未入力データを取得したい
  • 未処理のレコードを抽出したい
  • NULLが入っているデータを確認したい

しかしSQL初心者の方は、次のようなクエリを書いてしまいがちです。

SELECT *
FROM users
WHERE email = NULL;

実はこの書き方では、NULLを判定することができません。

PostgreSQLでは、NULLを判定するために
通常の比較演算子(= や <>)ではなく、専用の構文を使用する必要があります。

この記事では、PostgreSQLでのNULL判定について以下を解説します。

  • NULL判定の基本(IS NULL / IS NOT NULL)
  • よくあるミス
  • 実務でよく使うNULLの扱い方

PostgreSQLを使い始めた方や、SQLの理解を深めたい方はぜひ参考にしてください。

目次

結論 PostgreSQLのNULL判定は「IS NULL」を使う

PostgreSQLでNULLを判定する場合は、IS NULL を使用します。

例えば、emailがNULLのレコードを取得する場合は次のように書きます。

SELECT *
FROM users
WHERE email IS NULL;

このクエリは、

  • emailが設定されていない
  • emailが未入力

といったレコードを取得できます。

SQLでは、NULLは「値が存在しない状態」を意味します。
そのため、通常の比較演算子では判定できない仕様になっています。

この点はSQL初心者がよくつまずくポイントなので、まずは
NULLは「IS NULL」で判定すると覚えておきましょう。

PostgreSQLでNULLを判定する基本

ここでは、PostgreSQLでNULLを判定する基本構文を紹介します。

IS NULL(NULLの行を取得)

特定のカラムがNULLのレコードを取得する場合は、
IS NULLを使用します。

例として、emailがNULLのユーザーを取得するクエリを見てみましょう。

SELECT *
FROM users
WHERE email IS NULL;

このクエリでは、emailカラムに値が入っていないレコードのみが取得されます。

IS NULLは次のようなケースでよく使われます。

  • 未登録データの抽出
  • 未処理レコードの取得
  • 入力漏れデータの確認

実務では「未設定」「未完了」などの状態を管理するために、
NULL判定を使う場面は非常に多くあります。

IS NOT NULL(NULL以外)

NULL以外のレコードを取得したい場合は、
IS NOT NULLを使用します。

SELECT *
FROM users
WHERE email IS NOT NULL;

このクエリは、emailが設定されているユーザーのみを取得します。

IS NOT NULLは、次のような場面でよく使用されます。

  • データが入力されているレコードの取得
  • 有効データの抽出
  • NULLを除外した検索

例えば、メールアドレスが登録されているユーザーに対して
メール配信を行う場合などに利用されます。

PostgreSQLでよくあるNULL判定ミス

NULL判定で最も多いミスは、比較演算子を使ってしまうことです。

「=NULL」は使えない

次のようなSQLを書いた経験がある方も多いのではないでしょうか?

SELECT *
FROM users
WHERE email = NULL;

しかし、このクエリは期待通りに動作しません。

実行しても、結果は0件になります。

その理由は、NULLの性質にあります。

NULLは「値が存在しない状態」を表しているため、
SQLでは次のような比較が成立しません。

NULL = NULL
NULL <> NULL

つまり、NULLは何とも比較できない特殊な値なのです。

そのため、NULLを判定する場合は、比較演算子ではなく、専用の構文を使う必要があります。

WHERE email IS NULL

この書き方が正しい方法になります。

PostgreSQLのNULL判定応用

ここでは、実務でもよく使われるNULLの扱い方を紹介します。

COALESCEでNULLを置き換える

NULLを別の値に置き換えたい場合は、COALESCE関数を使用します。

SELECT COALESCE(email,'未登録')
FROM users;

このクエリでは、

  • emailがNULL → 「未登録」を表示
  • emailがNULLでない → emailを表示

という処理になります。

COALESCEは次のような用途でよく使われます。

  • 画面表示用の値を設定
  • NULLによるエラー回避
  • 集計結果の整形

例えば、売上集計などでNULLが入ると
計算結果が崩れる場合があります。

そのような場合にCOALESCEを使うことで、
NULLを安全に処理できます。

NULLと空文字を同時に判定する

実務では、NULLだけではなく、空文字(”)も同時にチェックしたいことがあります。

その場合は、次のように書きます。

SELECT *
FROM users
WHERE email IS NULL
OR email = '';

このクエリでは、

  • emailがnULL
  • emailが空文字

の両方のレコードを取得できます。

特に、外部システムから取り込んだデータではNULLと空文字が混在していることも多いため、このような条件は実務ではよく使われます。

NULL判定の実務での使いどころ

NULL判定は、実務でも非常によく使われます。

例えば、次のようなケースです。

  • 未発送の注文を取得
  • 未ログインユーザーの抽出
  • 未処理データの確認

例として、発送されていない注文を取得するクエリを見てみましょう。

SELECT *
FROM orders
WHERE shipped_at IS NULL;

このクエリでは、発送日時が設定されていない
「未発送の注文」を取得できます。

このように、NULLは
状態管理(未処理・未完了など)として利用されることが多いです。

SQLを書くエンジニアにとって、
NULL判定は基本でありながら非常に重要な知識といえるでしょう。

まとめ

PostgreSQLでNULLを判定する場合は、
専用の構文を使用する必要があります。

基本は次の2つです。

判定SQL
NULLIS NULL
NULL以外IS NOT NULL

また、NULL判定では次の点に注意しましょう。

  • = NULL は使えない
  • NULLは比較できない特殊な値
  • COALESCEでNULLを置き換えることも可能

NULLの扱い方を理解しておくことで、
SQLのトラブルを防ぎ、より正確なデータ取得ができるようになります。

PostgreSQLを扱うエンジニアの方は、
ぜひ今回紹介したNULL判定を覚えておきましょう。

PostgreSQLは、現場でも広く使われている信頼性の高いデータベースです。もしこれから本格的に学び、実務で通用する力をつけたい方には、RareTECHをチェックしてみてください。実案件ベースのカリキュラムで、あなたのスキルを次のステージへ引き上げてくれるはずです。


なんくる

「本当にエンジニアとしてやっていけるか不安…」という方も、実践的な開発に関わることで、転職後の働き方を事前に体感できますよ。

実務で使えるDBスキルとともに、プログラミングスキルをちゃんと身につけたいなら、
RareTECH無料カウンセリングで、学ぶ目的やゴールをプロと一緒に明確にしてみましょう。独学では得られない「実践的な成長の道筋」が見えてきます。


もしこの内容を通して、PostgreSQLについてさらに理解を深めたいと感じられたなら、信頼できる講座や書籍を紹介した別記事をご覧いただくのも良いかと思います。ご自身の学びに、きっとお役立ていただけるはずです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

沖縄出身のエンジニアです。IT業界で5年以上の経験があり、主にC#やPHPを使って開発を行ってきました。新しい技術にも興味があり、日々学びながらスキルアップを目指しています。

コメント

コメントする

CAPTCHA


目次