フィア・オブ・ジ・アンノウン【SQLアンチパターンまとめ】

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")