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
理由:不明な文字列に文字列を足してもやはり不明だから
SQLのNULLに対する正しい解釈【SQLアンチパターンまとめ】フィア・オブ・ジ・アンノウン
title:SQLのNULLに対する正しい解釈【SQLアンチパターンまとめ】フィア・オブ・ジ・アンノウン
img:https://www.oreilly.co.jp/books/images/picture_large978-4-87311-589-4.jpeg
description:データベース設計における重大なセキュリティリスクのうちの一つに、「SQLでパスワードを平文で格納する」というものがあります。これは重大なセキュリティ欠陥であり、権限のない人に特権的なアクセスを与えるセキュリティリスクを生じさせます。
category_script:page_name.startswith("30")