SQLのNULLに対する正しい解釈【SQLアンチパターンまとめ】フィア・オブ・ジ・アンノウン
Sal
sql

SQLのNULLに対する正しい解釈【SQLアンチパターンまとめ】フィア・オブ・ジ・アンノウン

  1. NULLに対する誤解の例
  2. NULLの正しい解釈
  3. NULLの演算に対する予想と結果
  4. # NULL=0
  5. # NULL=1234
  6. # NULL<>1234
  7. # NULL+1234
  8. # NULL+'何かの文字列'
## NULLに対する誤解の例
- NULLは「何も無い」を表す これだと 「1 + NULL」が「NULL」になる説明ができません。 1に対して「何も無い」を足すとそのまま1になりそうですが、SQLではNULLにいかなる演算を行ってもNULLしか返しません。 - NULLは「適応不能」を表す これについては「1 + NULL」ならば説明できそうです。 1に「適応不能」を足した結果がやはり「適応不能」になるのは直感的に判断できそうです。 しかし 「NULL = NULL」はどうでしょう。(ちなみにこのNULL同志の比較結果はNULLになります) 適応不能と適応不能は同じに見えるのでしょうか。 これもどこか直感に反しているように見えます。
## NULLの正しい解釈
# NULLは「不明」と考えると全ての辻褄があう。 以下の例え話を聞けばなぜNULLを不明な値として扱うのが適切なのかがわかるでしょう。

ここにあなたの部下のスタンという名前の30歳の男性がいます。
そこにもう一人の部下の男性オリバーが来ました。
オリバーの年齢は「不明(NULL)」です。

この状況下であなたは二人がどちらが歳をとっているかと聞かれたらどう答えれば良いでしょうか。
おそらくあなたは「不明(NULL)」と答えるでしょう。

だから、「NULL > 30 = NULL」なのです。

おそらくSQL文を定義した人はNULLを「不明な値」と定義することがエンジニアにとって都合がいいと考えたのでしょう。
## NULLの演算に対する予想と結果
### NULL=0
多くの人の予想:TRUE 実際の結果:NULL 理由:NULLはゼロではなく「不明」だから
### NULL=1234
多くの人の予想:FLASE 実際の結果:NULL 理由:不明な値がある値と等しいかどうかは予想できないから
### NULL<>1234
多くの人の予想:TRUE 実際の結果:NULL 理由:不明な値がある値と等しくないかどうかは予想できないから
### NULL+1234
多くの人の予想:1234 実際の結果:NULL 理由:不明な値にある値を足してもやはり不明だから
### NULL+'何かの文字列'
多くの人の予想:'何かの文字列' 実際の結果:NULL 理由:不明な文字列に文字列を足してもやはり不明だから title:SQLのNULLに対する正しい解釈【SQLアンチパターンまとめ】フィア・オブ・ジ・アンノウン img:https://www.oreilly.co.jp/books/images/picture_large978-4-87311-589-4.jpeg