検索

キーワード


【SQL】IS NULLについて

  • 公開日:2020-10-30 17:54:11
  • 最終更新日:2020-12-26 22:48:35
【SQL】IS NULLについて

こんにちは。駆け出しプログラマーの松下です!

「IS NULL演算子」と「IS NULL関数」について説明します。

SQLについて学び始めたばかりという方の参考になれば幸いです。


例ではMicrosoft SQL Serverを使用し、あらかじめ作成した下記の"employees"テーブルからのデータ取得をします。

employees テーブル


IS NULL演算子とは

NULLは値の未定義を意味する値で、0や空文字ではありません。

値が未定という意味を持っているため、NULL同士でも等しくならず、計算や比較には使えません。

つまりNULLは等号(=)や不等号(<>≦≧)の対象にならないのです。


そのためデータベースでNULLを検索するには、「カラム名=NULL」と指定するのではなく、専用の命令句「IS NULL演算子」を使います。

IS NULL演算子はWHEREなどと組み合わせて使われることが多く、NULLか判定したい列名の後ろにIS NULLをつけます。

SELECT * FROM employees WHERE 名前 IS NULL;

IS NULL演算子でNULLの入ったデータを取得

名前がNULLの2行のデータが取得されました。


IS NOT NULL演算子

逆にNULL以外を探すときにはIS NOT NULL演算子を使います。

SELECT 社員番号,名前,年齢 FROM employees WHERE 名前 IS NOT NULL;

IS NOT NULL演算子でNULLでないデータを取得

名前がNULLでないデータが取得されました。


IS NULL関数とは

IS NULL演算子と紛らわしいものでIS NULL関数があります。

これはNULLを指定した文字列に置き換える関数です。

ISNULL(NULLかチェックしたい要素,置き換えたい文字列) と記述します。

SELECT 社員番号,ISNULL(名前,'new employee') FROM employees;

IS NULL関数の使用例

名前がNULLだったところがnew employeeに置き換わっています。


前述の通りNULLを含むものは集計の対象外になってしまうので、この関数はNULLを含むデータも合わせて集計したいときに活用できます。

SELECT COUNT(名前) AS '数',AVG(年齢) AS '平均' FROM employees;

SELECT COUNT(ISNULL(名前,'new employee')) AS '数'
,AVG(ISNULL(年齢,0)) AS '平均'
FROM employees;

IS NULL関数を使用する前後での集計の変化

NULLのデータが数えられ、年齢のNULLを0に置き換えてるので平均はISNULLを使ってない方より小さくなりました。


類似の関数

IS NULL関数は、Microsoft SQL Serverなど一部の環境でしか使えませんが、それぞれの環境に別名で同様の機能の関数があります。


・NVL

Oracleで使用します。

NVL(NULLかチェックしたい要素,置き換えたい文字列)

またNVL2というNULLでない場合にも置き換える値を設定できる関数もあります

NVL2(NULLかチェックしたい要素,要素がNULLでないとき置き換えたい文字列,要素がNULLのとき置き換えたい文字列)


・IF NULL

MYSQL、SQLiteで使用します。

IFNULL(NULLかチェックしたい要素,置き換えたい文字列)


・COALESCE

PostgreSQLをはじめ主要DBMSで使用できます。

COALESCE(NULLかチェックしたい要素,置き換えたい文字列)
COALESCE(カラム1,カラム2,カラム3,カラム4,,置き換えたい文字列)

後者のように、カラム1がNULLならカラム2の値を表示し、カラム2がNULLならカラム3の値を…、全てNULLなら最後に記述した値に置き換えるといった使い方もできます。



【著者】

松下

今年文系未経験からプログラマとなりました。 同じ初心者の方に分かりやすいよう簡潔な記事を心がけていきます。 趣味はサッカー観戦と洋服です。

よく読まれている記事