.net column
.NET開発者のためのブログメディア

SQLのIS NOT NULLの使い方|IS NULLの使い方も解説

 
SQLのIS NOT NULLの使い方|IS NULLの使い方も解説
SE
IS NOT NULLの使い方を覚えたいのですが、どのように実装すればいいですか?
PL
IS NOT NULL関数やIS NULLの利用法を説明します。利用環境についてもきちんと理解しておくと良いでしょう。

関連記事:
SQL ServerのDATETIMEとは?文字列からの変換や注意点も紹介
SQL Serverの日付データ取得の関数6つ|文字列や数値で取得する方法も説明
SQLServerのINSERT intoの使い方とは?列名を指定する・指定しないINSERT

NULLの演算子と関数の違い

IS NULL演算子は、NULLかどうかを判定する際に利用する演算子で、ISNULL関数は、NULLを指定の文字列に変換する関数です。使い方も非常にシンプルですし、SQL自体はどこの開発現場でも必ずと言っていいほど利用されている言語ですので、積極的に活用して早く自分のものにしましょう。

SQLのIS NOT NULLの使い方3つ

IS NULL演算子に対して「NULL値以外かどうかを判定する」にはIS NOT NULL演算子を使用します。

IS NOT NULLのような否定系のSQL(NOTを使った条件を使ったSQL)はインデックスが使用されないため、テーブルがフルスキャンされることもあり、処理速度悪化の恐れからSELECT文ではあまり使用しません。

SQLの「IS NOT NULL」の使い方について3つ紹介します。

1:IS NOT NULLを記述するための準備

IS NOT NULLの使い方1つ目はIS NOT NULLを記述するための準備についてです。

IS NOT NULLなど否定系のSQL(NOTを使った条件を使ったSQL)はインデックスが使用されないため、テーブルがフルスキャンされることもあり、処理速度悪化の恐れからSELECT文ではあまり使用しません。

但し、条件に一致するレコードが(全体の数%程度の)少ない場合、フルスキャンする方が早くなるため「IS NOT NULL」を使用します。

予め、対象テーブルに条件(NULL)に一致するレコードが全体に占める割合を調査し、(全体の数%程度の)少ない場合、IS NOT NULL演算子を使用します。条件(NULL)に一致するレコードが全体に占める割合が多い場合、NULL以外の値を条件に指定する記述にします。

NULLのカラムに値を設定

SHAIN_ID SHAIN_NAME BUSHO_CD
S001 社員 A一 B001
S002 社員 B二 NULL
S003 社員 C三 NULL

NULLのカラムに値を設定する方法についてです。

SQL ServerでNULLのカラムに値を設定する場合は「IS NULL関数」を使用します。(SQL Server以外でのISNULL関数に代わる記述方法については後述します。)

下記にサンプルを示します。上記テーブル情報をもとに、NULLの項目を指定の文字列に置換して取得します。

上記のSQLを実行した結果です。

NULLが「配属未定」に変換されています。ISNULL関数により値を変換してデータを取得する際には、AS句で項目に別名をつけるようにします。別名をつけていない場合「(列名なし)」となってしまい、不具合の原因となる恐れもあります。

2:NULLが許容している列をNULLを許容せずに設定変更するサンプル

IS NOT NULLの使い方2つ目はNULLを許容する列からNULLを許容しない列に設定を変更する方法についてです。NULLを許容する列からNULLを許容しない列に設定を変更する場合のサンプルを下記に示します。

3:カラム値がすべてnullになっている場合のサンプル

IS NOT NULLの使い方3つ目はカラムの値がすべてnullになっている場合にNULLを許容しないカラムに設定を変更する方法についてです。

カラム値がすべてnullになっている場合のサンプルを下記に記します。対象のカラム(COLUMN01, COLUMN02)に0を埋めた後、設定をNOT NULLに変更します。

SQLのIS NULLの使い方

ここでは、主にWhere条件で利用することが多くなるNULLかどうかを判定するために利用する演算子と、SQLのIS NULLの使い方を説明しますので、ぜひ参考にしてみてください。

IS NULL演算子の使い方

IS NULL演算子とは、NULLかどうかを判定するために利用する演算子です。主にWhere条件で利用することが多くなるかと思います。

アプリケーション開発の現場で、テーブルにNULLのデータが含まれているかの確認はよくあることです。もちろん、NULL以外のデータの確認もあるでしょう。IS NULL演算子はNULLが利用できるデータベースでは基本的な使い方ですので、早めに使い方はマスターしておきましょう。

使い方は非常に簡単です。まずはNULLのデータを取得する方法を解説します。
上記テーブル情報をもとに検索します。

ID KU MACHI
1 渋谷区 桜丘町
2 港区 NULL
3 世田谷区 NULL
取得結果
上記のSQLを実行した結果です。

次にNULL以外のデータを取得するSQL文です。
取得結果
上記のSQLを実行した結果です。

使い方はとてもシンプルだということを確認できたかと思います。他の条件と組み合わせて早速使ってみましょう。

IS NULL関数の使い方

データベースではNULLが許容されていても、アプリケーションサイドではNULLのためにシステム障害が発生することはよくあります。このようなエラーを起こさないよう、データベースサイドでISNULL関数を利用して、NULLを指定の文字列に置き換える処理を実装することも、SQLプログラミングのひとつです。

こちらも使い方は非常に簡単です。
先ほどと同じテーブル情報をもとに、NULLの項目を指定の文字列に置換しましょう。

ID KU MACHI
1 渋谷区 桜丘町
2 港区 NULL
3 世田谷区 NULL
取得結果
上記のSQLを実行した結果です。

NULLが’置換’に変換されています。
ISNULL関数を使用してデータを取得する際には、AS句で項目に名前をつけましょう。つけていなかったら「(列名なし)」となってしまい、不具合の原因になる恐れもあります。

SQL環境以外のIS NULLに代わる記述方法3つ


SQL Server 以外のDB環境で「IS NULL関数」に代わる記述方法を3つ紹介します。

値がNULLかどうかを判定する「IF NULL演算子」はOracle・DB2・MySQL・PostgreSQL・Accessなどといった多くの環境で使用可能です。

1:Mysql・SQLiteの場合

Mysql・SQLiteの場合、「IS NULL関数」に代わる記述方法として「IFNULL関数」を使用します。

「IFNULL関数」を使用したサンプルを下記に示します。

テーブル情報からカラム「SHAIN_ID」「SHAIN_NAME」「BUSHO_CD(NULLの場合、’配属未定’に置換)」を取得します。

「IFNULL関数」の代わりに「COALESCE関数」を使うこともできます。
「COALESCE関数」は引数の1番目からn-1番目の値の中で最初にNULLでない値を返します。

「COALESCE関数」を使用したサンプルを下記に示します。

2:Oracleの場合

Oracleの場合、「IS NULL関数」に代わる記述方法として「NVL関数」を使用します。

「NVL関数」を使用したサンプルを下記に示します。

テーブル情報からカラム「SHAIN_ID」「SHAIN_NAME」「BUSHO_CD(NULLの場合、’配属未定’に置換)」を取得します。

3:PostgreSQLの場合

PostgreSQLの場合、「IS NULL関数」に代わる記述方法として「COALESCE関数」を使用します。

「COALESCE関数」を使用したサンプルを下記に示します。

テーブル情報からカラム「SHAIN_ID」「SHAIN_NAME」「BUSHO_CD(NULLの場合、’配属未定’に置換)」を取得します。

SE
IS NULL演算子とIS NULL関数の2通りのパターンがあるのですね。IS NOT NULLとIS NULL関数は知識不足でした。ここで確認できて良かったです。
PL
NULLを許容しているデータベースでは、IS NOT NULLやIS NULL演算子、IS NULL関数ともに利用することが多くなります。開発現場では、両方ともよく利用する命令ですので、早めに理解しておきましょう。

SQLのIS NULL・IS NOT NULLの使い方を覚えよう

IS NULL演算子は「NULLかどうかを判定する際に使用する演算子」で、ISNULL関数は「NULLを指定の文字列に変換する関数」です。似ていますが、役割は異なります。

またIS NOT NULL演算子はIS NULL演算子と逆に「NULL以外を探す際に使用する演算子」ですので、こちらも合わせてしっかり覚えておきましょう。

SQL自体はどこの開発現場でも必ずと言っていいほど利用されている言語です。積極的に活用し、早く自分のものにしていくことが大切です。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

reccomended

Categories

Tags