👌

SQLの3値論理の結果に関する考え方について

2022/10/02に公開

SQLでは true / false / unknown という3値論理で記述することができるみたいですが、

「3値論理の結果を優先順位で覚える(後述)」「真理値表を覚える」というのがあまり納得いかなかったので、覚えなくてもいいように考え方を書きました。

まずunknownを使った論理の結果は以下です。これを見たときに個人的に「?」となったので整理したという感じです。なんか直感に反してませんか?ちなみに反してない人はこの記事のターゲットではないです。

結果
unknown AND true unknown
unknown AND false false
unknown AND unknown unknown
unknown OR true true
unknown OR false unknown
unknown OR unknown unknown

unknownとは不定

unknownは「不定」という意味であり、trueにもfalseにもなり得る状態というふうに考えるとわかりやすいかもしれません。

つまり、

unknown AND true は、 true AND truefalse AND true かのどちらかになるということです。true AND truetruefalse AND truefalseなので、結果は「truefalseになる」、つまりunknown(不定)ということでした。

そういうわけでさっきの表というのはつまり以下のようになります。

展開後 結果
unknown AND true true AND true true
false AND true false
└---> ---> unknown
unknown AND false true AND false false
false AND false false
└---> ---> false
unknown AND unknown true AND true true
true AND false false
false AND true false
false AND false false
└---> ---> unknown
unknown OR true true OR true true
false OR true true
└---> ---> true
unknown OR false true OR false true
false OR false false
└---> ---> unknown
unknown OR unknown true OR true true
true OR false true
false OR true true
false OR false false
└---> ---> unknown

覚えなくて済んで助かりました。

3値論理は日常でも

  • 「そっちのことは全然わからんけどここが正しいんだから全体では正しいよ」
  • 「そっちのことは全然わからんけどここが間違ってるから全体として間違ってるよ」
  • 「いくらこれが正しくてもそっちのことが全然わかってないなら全体としては正しいとか正しくないとかはまだわからないよ」

というふうに使えると思うのでちょこっとだけ便利そうに見えます。

あとはなんか量子力学っぽくてかっこいいですね。

おまけ

ちなみに優先順位の考え方はこれです。

ANDの場合: false > unknown > true
ORの場合 : true > unknown > false

Discussion