【SQL】INSERT文でNULL値を登録する方法

このページでは、ORACLEデータベースのSQLで、NULL値をINSERTする方法を紹介します。

NULL値を登録する方法はいくつかあるので順々に紹介していきます。

INSERT文のサンプルは↓で多数紹介していますので参考にしてください。
>>【SQL】INSERT文の書き方:サンプル多数あり

NULL値を登録する場合の注意点

NULL値をセットできる列(カラム)は、非キー属性(キー項目でないカラム)、NOTNULL制約のないカラムだけです。

キーの一部、またはNOTNULL制約のカラムにNULLは設定できず、登録しようとするとSQLエラーになります。

どうしてもNULL値をセットしたい場合には、キー項目の変更やNOTNULL制約の解除が必要です。

NULL値をINSERTする方法

1.VALUESでNULL値を設定する

VALUESで指定することで、NULL値を登録することが出来ます。

明示的にNULLを指定する方法で、見た目にも分かりやすい方法です。

次のサンプルでは、col3の値にNULLを登録しています。NULLを指定するときは、NULLもしくはnullと記述します。

INSERT INTO tab1(col1,col2,col3) VALUES('001','test',NULL);
INSERT INTO tab1(col1,col2,col3) VALUES('002','test',null);

2.列名(カラム名)を省略する

カラム名と値を省略することで、暗黙的にNULL値をセットすることが出来ます。

例えば、TAB1テーブルにCOL3と言うカラムがNULLを許可する項目として存在する場合です。

カラム名とVALUESの値を省略することで、暗黙的にcol3にNULL値を登録することが出来ます。

INSERT INTO tab1(col1,col2) VALUES('001','test');

3.CASE式でNULLを返す

CASE式を使い、条件分岐させて、NULLを返すことが出来ます。

次のサンプルでは、col1の値がAでないとき、ELSEでNULLを返すようにしています。このようにCASE文の条件でNULLを返すように指定することもできます。

INSERT INTO tab1
SELECT
    CASE WHEN col1 = 'A' THEN '1'
         ELSE NULL
    END
FROM
    tab2;

まとめ

INSERT文でNULLを登録する方法はいくつかのパターンがあります。独自のファンクションを作ってNULL値を返すことなども可能です。

NULL値を別の値に置き換えて登録する方法は「【SQL】INSERT文でNULLを置き換えて登録する方法」で詳しく解説しています。

このほか、INSERT文には様々な書き方があります。
詳しくは「【SQL】INSERT文の書き方:サンプル多数あり」で解説しているのでぜひ参考にしてください。