Developer

【SQL基礎】NULLの判定
2020.12.25
Lv1

【SQL基礎】NULLの判定

本項では、IS NULLやIS NOT NULL演算子について説明していきます。


NULLは比較できない?

数値や文字列などは、=、<、>などの比較述語で比較することができました。

では、NULLもといきたいところですが、これはうまくいきません。

このように比較述語での比較の結果は、すべてNULLとなってしまいます。
なぜこのようなことになるかというと、NULLとは具体的な値ではなく、何もデータが格納されていない状態を指すものだからです。

比較述語は、値と値を比較するためのものです。その為、値ではないNULLを比較しようとすると不明な結果(UNKNOWN)となりNULLが返ってくることになります。


NULLを判定する

カラムに格納されているデータがNULLかどうか判定するにはどうすればいいかというと「IS NULL」という述語を使用します。
では、実際に使用してみましょう。
以下のようなデータを持つテーブルがあったとします。

ここから、ageがNULLの行のみを選択してみます。

SELECT *
FROM teachers
WHERE age IS NULL;

年齢不詳のハナコさんのみ選択することができました。
また、NULL以外の行を選択したい場合は、否定形である「IS NOT NULL」を使用します。

SELECT *
FROM teachers
WHERE age IS NOT NULL;

ageがNULL以外の行が選択されたことが確認できました。


今回の学習ポイント

・比較述語ではNULLを判定できない
・NULLを判定するには「IS NULL」や「IS NOT NULL」を使用する。


練習問題

問題として使用するデータは「SQL練習問題」のものを使用しています。
以下からダウンロード可能です。
また、ダウンロードしたら以下のようにしてworldcup2014データベースを作成し、インポートしてください。
※worldcup2014.zip解凍してできるworldcup2014.sqlファイルをCドライブ直下に配置した場合。

worldcup2014.zip

[sql] CREATE DATABASE worldcup2014;

use worldcup2014

source C:\worldcup2014.sql
[/sql]

1.「goals」テーブルから、入力ミスでゴールを決めた選手情報(player_id)がないデータを選択してください。

答え
[sql] SELECT *
FROM goals
WHERE player_id IS NULL;
[/sql]

選手情報(player_id)がない = NULL の行を選択しています。
NULLである判定には「IS NULL」を使用します。

2.「goals」テーブルから、フランス対ホンジュラス戦(pairing_id=10)で、ゴールした選手がわかっているデータを選択してください

答え
[sql] SELECT *
FROM goals
WHERE pairing_id = 10 AND player_id IS NOT NULL;
[/sql]

フランス対ホンジュラス戦(pairing_id=10)で、且つ、選手情報(player_id)がない = NULL の行以外を選択しています。
NULLではない判定には否定形の「IS NOT NULL」を使用します。

 

 

連載目次リンク

SQL基礎 連載目次

関連する連載リンク

SQL練習問題 一覧まとめ