【SQL】NULL値を含んだ条件式
NULL値を含んだ条件式
先日、現場で単体テスト中にNULL値の取り扱いによるバグが見つかったため、備忘録としてNULL値を含む正確な条件式を整理します。
バグの内容は省きますが、条件式にNULLが入っていたため出力結果が何も得られなく意図しない動作を起こしていました。
条件式では、結果としてTRUE, FALSEの2値を取り扱うのが一般的です。ただし、データベース操作などにおいてはTRUE, FALSE, NULLの3値のいずれかが結果として取り扱われます。
このNULLを結果として扱うに違和感を感じるかもしれませんが、そういうものと割り切ってしまいましょう!
NULLの条件式の結果
NULLを含んだ条件式を以下に示します。
特にNULL AND TRUEがNULLになったり、NULL OR TRUEがTRUEになったりは感覚的に受け入れられるものの、赤字部分の条件式は判定がどちらになるのか毎回調べています。
TURE, FALSE, NULLの評価の優先度?(適切な言葉が分からないためこのように表しています。)としては、
TRUE > NULL > FALSEの順に強弱関係?があると考えることで条件式の結果を感覚的に受け入れやすくなります。
NULL OR FALSEの場合はNULLはFALSEより評価されるため、結果はNULLになります。
逆にFALSE AND FALSEの場合はFALSEがNULLより評価されるため、結果はFALSEになります。