スケーラブルデータベースサーバ HiRDB Version 8 SQLリファレンス

[目次][索引][前へ][次へ]

1.7 ナル値

ナル値とは,値がないこと,又は値が設定されていないことを示すために使用する特殊な値です。領域に値がないか,又は設定されていなければ,ナル値が設定されます。また,抽象データ型の値がナル値かどうかは,コンストラクタ関数によって値が生成されているかどうかを示すために使用します。

ナル値の扱いについて次に示します。

<この節の構成>
(1) 検索結果の列の値の受け取り
(2) 表への値の格納
(3) 比較
(4) 結合
(5) ソート
(6) グループ分け
(7) 重複排除
(8) 集合関数
(9) ウィンドウ関数
(10) インデクス
(11) 四則演算,日付演算,時刻演算,連結演算
(12) スカラ関数
(13) CASE式
(14) 抽象データ型
(15) 論理述語
(16) 繰返し列
(17) WRITE指定
(18) GET_JAVA_STORED_ROUTINE_SOURCE指定
(19) CAST指定
(20) 参照制約

(1) 検索結果の列の値の受け取り

標識変数の値でナル値を受け取ったかどうかが分かります。埋込み変数でナル値を受け取ることはできません。詳細は,「1.6.5 標識変数の値の設定」を参照してください。

(2) 表への値の格納

標識変数の値でナル値を格納したかどうかが分かります。埋込み変数ではナル値を表へ格納できません。詳細は,「1.6.5 標識変数の値の設定」を参照してください。

(3) 比較

NULL述語以外の述語で,指定した値式,列,埋込み変数の値がナル値である行に対して,その述語は不定になります。ただし,埋込み変数でナル値を指定するには,標識変数が必要です。

(4) 結合

結合列にナル値を持つ行は,どのような行に対しても結合条件を満たしません。

(5) ソート

昇順の場合は最後に出力します。降順の場合は,最初に出力します。

(6) グループ分け

グループ分けの条件となる列にナル値を持つ行がある場合は,ナル値同士を同じ値として扱い,グループ分けします。

(7) 重複排除

ナル値同士は,重複するものとして扱います。

(8) 集合関数

集合関数では,基本的にナル値を無視します。ただし,COUNT(*)の場合は,ナル値に関係なく条件を満たすすべての行を計算します。

(9) ウィンドウ関数

COUNT(*) OVER()の場合は,ナル値に関係なく条件を満たすすべての行を計算します。

(10) インデクス

ナル値を含む列に対してもインデクスを定義できます。

(11) 四則演算,日付演算,時刻演算,連結演算

データがナル値の場合,四則演算,日付演算,時刻演算,及び連結演算の結果もナル値になります。

(12) スカラ関数

VALUE又はSTRTONUM以外のスカラ関数では,引数の値式のどちらかがナル値の場合,結果もナル値になります。スカラ関数VALUEでは,引数の値式がすべてナル値であれば,結果もナル値になります。スカラ関数STRTONUMでは,引数1の値式がナル値であれば,結果もナル値になります。

(13) CASE式

CASE略式のCOALESCEの場合,引数の値式がすべてナル値であれば,結果もナル値になります。

(14) 抽象データ型

抽象データ型のナル値の扱いについて,抽象データ型にコンストラクタ関数を指定して値を生成している場合とそうでない場合に分けて,説明します。

(15) 論理述語

論理値が不定であることと,論理値がナル値であることは等価です。

(16) 繰返し列

要素にはナル値を持つ場合もあります。また,列の要素が0の場合,列全体をナル値とします。

(17) WRITE指定

WRITE指定の場合,引数のどれかがナル値のときは,結果もナル値になります。

(18) GET_JAVA_STORED_ROUTINE_SOURCE指定

次のどれかの条件を満たす場合,GET_JAVA_STORED_ROUTINE_SOURCE指定の結果はナル値になります。

(19) CAST指定

値式にNULLを指定するか,又は値式の結果がナル値の場合は,結果の値はナル値になります。

(20) 参照制約

外部キー構成列中にナル値が含まれる場合,その列は参照制約動作の対象になりません。