【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とうまく付き合っていきたいものですね!

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次