【SQL】NULLの上手な扱い方! IS NULL演算子とISNULL関数について

みなさんこんにちは!フリーランスプログラマーのsatoです。

「IS NULL」と聞いて、プログラムをかじったことがある人なら

NULLの判定に使うんだろうな
と考える人が多いと思います。

しかしSQLには使用環境によって「ISNULL関数」や「IS NULL演算子」が存在します。
※また関数名などは環境によって違います。

しかも機能はそれぞれ違います。

似た名前でややこしいですね…

これらの違いを理解しておかないと、ややこしいことになるため、今回覚えてしまいましょう!それでは早速それぞれの、使用可能環境や特徴・使い方を見ていきましょう!

目次

NULLを判定する「IS NULL演算子」

ではまず「IS NULL演算子」から見ていきましょう。

「IS NULL演算子」とは

「IS NULL演算子」とは、その名の通り「NULLかどうかをチェックしてくれる演算子」です。

主に「WHERE」の中の判定文の中で使用されます。

またこの演算子はOracle・DB2・SQL Server・MySQL・PostgreSQL・Accessなどといった大半の環境で使用可能です。

NULLを探す基本形ですので、しっかり覚えておきましょう。

「IS NULL演算子」の使い方

例えば、userテーブルの、「名前(name)の情報にNULLが入っている人」を探す場合は以下になります。

SELECT * FROM user WHERE name IS NULL;

非常に簡単ですね!

WHERE句の中で、「判定したい要素名」の後ろに「IS NULL」をつけるだけです。

逆の意味の「IS NOT NULL演算子」もある!

逆にNULL以外を探す場合は「IS NOT NULL演算子」を使用しましょう。

SELECT * FROM user WHERE name IS NOT NULL;

先ほどと同じく「判定したい要素名」の後ろに「IS NOT NULL」をつけるだけですね!

NULLに置換をかける「ISNULL関数」

次に「ISNULL関数」についてみることにしましょう。

「ISNULL関数」とは

一言で言えば「NULLの要素に対して指定した文字列で置換をかけてくれる関数」です。

SQL Server・Accessといった一部の環境でしか使えないため注意が必要です。

ですが「Oracle」「mysql」「PostgreSQL」「SQLite」にはそれぞれ別名で同じ機能をもった関数があります。

そちらも合わせて見ていきましょう。

「ISNULL関数」の使い方

基本的な使い方は非常に簡単で、以下の通りです。

ISNULL( [指定する要素], [置換したい文字列] )

第一引数に「NULLをチェックする要素名」。

第二引数に「NULLだった時、何で置換するか」を入力します。

例えばuserテーブルの、名前がNULLの要素に「UNKNOWN」と表示したい場合は、以下の通りです。

SELECT ISNULL(name, 'UNKNOWN') FROM user;

環境ごとの類似関数

それぞれの環境ごとにも、類似関数が存在します。

それぞれ同様の例で見てみましょう。

Oracle:

SELECT NVL(name, 'UNKNOWN') FROM user;

Mysql・SQLite:

SELECT IFNULL(name, 'UNKNOWN') FROM user;

PostgreSQL:

SELECT COALESCE(name, 'UNKNOWN') FROM user;

使用している環境の物だけでも、覚えておけると良いですね!

まとめ

今回は非常にシンプルに「ISNULL関数」と「IS NULL演算子」の二つについて見てきました。

「ISNULL関数」は「NULLの要素に対して、指定した文字列で置換をかけてくれる関数」です。

「IS NULL演算子」は「NULLかどうかをチェックしてくれる演算子」です。

似てはいますが、役割は違いますので、しっかり覚えておきましょう。上手につかってNULLとうまく付き合っていきたいものですね!

この記事を書いた人

学生時代を含めると、かれこれ10年以上プログラマーとして過ごしています。
様々な言語や環境、プロジェクトに関わってきましたので、より実践的な記事をみなさんにお届きるよう情報発信していきます!

目次