タグ

ブックマーク / tgk.hatenadiary.org (2)

  • 日常用語でnullを理解する(2) - 極北データモデリング

    SQLにおけるnullは「値があることは分かっているが、それが何なのかはわからない」という意味だ。 「値がない」という意味ではない、ということに注意しなくてはならない。 nullは「値がない」ではない nullを「値がない」という意味だと考えてしまうと、 'a'と'b'とnullを連結した結果が、nullになる 1 + nullがnullになる といったSQLの挙動の意味が理解できなくなる。 nullが「値がない」という意味なら select 'a' || 'b' || null の結果には少なくとも'ab'が含まれているはずあって、「値なし」になってしまうのはおかしい。 また select 1 + null の結果が「値なし」になってしまうのも何だかよくわからない。 つまりSQLは、nullを「値がない」という意味のものとしては扱わない。 が、「値がない(まだない or あり得ない)」と

    日常用語でnullを理解する(2) - 極北データモデリング
    aereal
    aereal 2011/08/12
  • 日常用語でnullを理解する(1) - 極北データモデリング

    セルコのなんかには、nullを参照するSQLが直感に反する結果を返すことがあると書いてあるのだが、3値論理は「論理」というぐらいだから人間にとって*常に*不可解なものであるはずがないし、だったらnullがらみのSQLの挙動を直感的・日常的な用語だけで(=ドモルガンの法則とか使わないで)説明することができるはずだ... と思って新人研修で試してみたところ良好な結果を得られたので、ブログにも書く。 どこが直感的ではないか nullが何かすごくやばいものだとされる根拠のひとつに、 NOT INのサブクエリがnullを1行でも返すと、メインクエリの結果が常に0件になる という現象がある。 たとえば「3値論理とNULL」には、サブクエリがnullを1つ返したために「Bクラスの生徒と年齢が一致しないAクラスの生徒」が特定できない、という例が挙げられている。 この結果が直感に反するように思われるのは、

    日常用語でnullを理解する(1) - 極北データモデリング
    aereal
    aereal 2011/08/12
  • 1