👌
SQLの3値論理の結果に関する考え方について
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 true か false AND true かのどちらかになるということです。true AND trueはtrue、false AND trueはfalseなので、結果は「trueかfalseになる」、つまり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