回答編集履歴
3
より厳密にしました。
test
CHANGED
@@ -12,9 +12,9 @@
|
|
12
12
|
|
13
13
|
```
|
14
14
|
|
15
|
-
Bar が空集合の場合
|
15
|
+
Bar が空集合の場合~~False になります。~~ True になりません。
|
16
16
|
|
17
|
-
Bar のすべてのレコードの pid が NULL ならば False になります。
|
17
|
+
Bar ~~のすべてのレコード~~の pid が NULL ならば ~~False になります。~~ Trueになりません。
|
18
18
|
|
19
19
|
それ以外は True です。
|
20
20
|
|
@@ -23,3 +23,49 @@
|
|
23
23
|
**追記**
|
24
24
|
|
25
25
|
B.pid が NULL の場合は、厳密にいうと、NULL in (... ) なので、3値論理の Unknown だと思います。
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
**追記2**
|
30
|
+
|
31
|
+
この in は、内部結合にすれば不要になります。そして、内部結合すら不要になり、Foo.pid の NOT NULL 制約に行きつくのでしょう。
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
**三値論理**
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
今の時代、三値論理は必須ですね。短絡評価と併せて追記しておきます。
|
40
|
+
|
41
|
+
[三値論理](https://ja.wikipedia.org/wiki/3%E5%80%A4%E8%AB%96%E7%90%86)
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
SQLはクリーネの三値論理を採用している。
|
46
|
+
|
47
|
+
三値論理は、True,Unknown,Falseの三値を使う論理である。三値には論理演算ごとに以下の規則がある。
|
48
|
+
|
49
|
+
- OR: True > Unknown > False (> 左側が優先度が高い)
|
50
|
+
|
51
|
+
- AND: False > Unknown > True (> 左側が優先度が高い)
|
52
|
+
|
53
|
+
- NOT: Unknown は Unknownに評価。その他は二値論理に同じ。
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
三値論理でも二値論理と同様、短絡評価 (short circuit evaluation) が可能。
|
58
|
+
|
59
|
+
- 選言標準形(ORだけで構成された論理式): Trueが出現した時点で式全体がTrueになるので評価終了。
|
60
|
+
|
61
|
+
- 連言標準形(ANDだけで構成された論理式): Falseが出現した時点で式全体がFalseになるので評価終了。
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
ついでに、SQLにおいて、以下の比較演算子は True/False の2値を返す。
|
66
|
+
|
67
|
+
- IS NULL
|
68
|
+
|
69
|
+
- IS TRUE
|
70
|
+
|
71
|
+
- IS FALSE
|
2
Unknown を追加。難しくなってきた。
test
CHANGED
@@ -17,3 +17,9 @@
|
|
17
17
|
Bar のすべてのレコードの pid が NULL ならば False になります。
|
18
18
|
|
19
19
|
それ以外は True です。
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
**追記**
|
24
|
+
|
25
|
+
B.pid が NULL の場合は、厳密にいうと、NULL in (... ) なので、3値論理の Unknown だと思います。
|
1
追加、Bar のすべてのレコードの pid が NULL ならば False になります。
test
CHANGED
@@ -12,4 +12,8 @@
|
|
12
12
|
|
13
13
|
```
|
14
14
|
|
15
|
-
Bar が空集合の場合
|
15
|
+
Bar が空集合の場合 False になります。
|
16
|
+
|
17
|
+
Bar のすべてのレコードの pid が NULL ならば False になります。
|
18
|
+
|
19
|
+
それ以外は True です。
|