MW211 EXIT

devlog
SQL/NULLの法則
2012年07月29日
NULLは「''」や「0」と混同してしまいがちだが、
以下の性質があるので押さえておくと何かと役立つ。
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
┌──────────────────────────────────────┐
│NULLが加減乗除の一要素となった場合、計算結果がNULLになる                    │
└──────────────────────────────────────┘
  なお、「1/NULL」のように除算しても除数ゼロエラーではなく計算結果がNULLとなる。
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
┌──────────────────────────────────────┐
│NULLに文字列結合した場合、結合結果がNULLになる                              │
└──────────────────────────────────────┘
  「NULL || 'a'」の結果は「'a'」ではなく「NULL」。
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
┌──────────────────────────────────────┐
│NULLの型は不明型(unknown)だが、キャストもできる                             │
└──────────────────────────────────────┘
  「NULL::integer」のようにキャストするとその型(integer型)のNULLとなる。
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
┌──────────────────────────────────────┐
│NULLを判定するとたいてい偽になる                                            │
└──────────────────────────────────────┘
  ・CASE WHEN NULL = 0 THEN '真' ELSE '偽' END  →  偽
  ・CASE WHEN NULL > 0 THEN '真' ELSE '偽' END  →  偽
  ・CASE WHEN NULL < 0 THEN '真' ELSE '偽' END  →  偽
  加減乗除の結果もNULLとなるという法則を組み合わせると以下も導き出せる。
  ・CASE WHEN (NULL + 1) > 0 THEN '真' ELSE '偽' END  →  偽
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
┌──────────────────────────────────────┐
│NULLを判定するためには「IS NULL」を使わなければならない                     │
└──────────────────────────────────────┘
  「NULL IS NULL」は真だが、「NULL = NULL」は偽。
  ちなみに「NULL IS NOT NULL」は偽だが、「NULL <> NULL」も偽。
  さらには、「IN (NULL)」も「NOT IN (NULL)」も偽。
  NULLに対しては「IS NULL」や「IS NOT NULL」を使わないと一律に偽になる。
分類:SQL