8. 確かめてみる (oracle)
• 比較
• 真
select 1 from dual where ('1' = '1');
• 偽
select 1 from dual where not('1' = '0');
• Unkhown
select 1 from dual where ('1' = null);
select 1 from dual where not('1' = null);
どちらもヒット
しない
ヒットする
ヒットする
※上記は、http://sqlfiddle.com/ で Oracle 11g に設定して確認することができます。
9. 確かめてみる (oracle)
• AND
select 1 from dual
where (1 = 1) and (null = null);
select 1 from dual
where not((1 = 0) and (null = null));
• OR
select 1 from dual
where (1 = 1) or (null = null);
select 1 from dual
where not((1 = 0) or (null = null));
True
False
Unkown
※上記は、http://sqlfiddle.com/ で Oracle 11g に設定して確認することができます。
10. 確かめてみる (oracle)
• AND
select 1 from dual
where (1 = 1) and (null = null);
select 1 from dual
where not((1 = 0) and (null = null));
• OR
select 1 from dual
where (1 = 1) or (null = null);
select 1 from dual
where not((1 = 0) or (null = null));
ヒットしない [Unknown判定]
ヒットする [not(False)判定]
ヒットしない [Unknown判定]
ヒットする [True判定]
※上記は、http://sqlfiddle.com/ で Oracle 11g に設定して確認することができます。
12. ちなみに null と NaN は違う (oracle)
create table test (
a BINARY_FLOAT
);
insert into test values (1000000.0);
insert into test values (0.0000001);
insert into test values (BINARY_FLOAT_INFINITY);
insert into test values (BINARY_FLOAT_NAN);
insert into test values (NULL);
select * from test where a > 0
※上記は、http://sqlfiddle.com/ で Oracle 11g に設定して確認することができます。
null はヒットしないが、
NaN はヒットする
13. Order by だと null が最大になる?
• 処理系依存。
• データベースによって異なる。
• 指定で変えられる。 (oracle)
• select * from test order by a nulls first
• select * from test order by a nulls last
18. 9値論理の場合の真理値
and
U X 0 1 Z W L H - /
U U 0 U U U 0 U U U
X 0 X X X 0 X X X
0 0 0 0 0 0 0 0
1 X X 0 1 X 1
X X 0 X X Z
X 0 X X W
0 0 0 L
1 X H
X -
or
U X 0 1 Z W L H - /
U U U 1 U U U 1 U U
X X 1 X X X 1 X X
0 1 X X 0 1 X 0
1 1 1 1 1 1 1
X X X 1 X Z
X X 1 X W
0 1 X L
1 1 H
X -
not
U X 0 1 Z W L H -
U X 1 0 X X 1 0 X
19. ところで「不明」は null っぽいとしても、「強い」「弱い」って何よ?
Character 意味
'U' uninitialized 未初期化
'X' strong drive, unknown logic value 強い 不明
'0' strong drive, logic zero 強い 0
'1' strong drive, logic one 強い 1
'Z' high impedance ハイインピーダンス
'W' weak drive, unknown logic value 弱い 不明
'L' weak drive, logic zero 弱い 0
'H' weak drive, logic one 弱い 1
'-' don't care 不関知
強い
弱い