箱庭ハーブblog

7年目プログラマの趣味の小部屋

Oracleのvarchar2と空文字列とNULL

ORACLE、Oracle、oracle、オラクル、NULL、Null、null、SQL、Sql、sql、Database、database、データベース、DB、db

Oracleだと、空文字列('')とNULLが等価。
「colSTR1 <> ''」 なんて条件式を書こうもんなら、なにも出てこない。ええ、出てきませんもの。
「colSTR1 <> NULL」なわけですから。

ちなみに。
Nullと=や<>すると何も出てこないことは、DBでは基本ですが、ちゃんと理由も押えておきましょう。
Nullが=や<>ではいけない理由は、C++などと異なり3値論理の1つとして働くからです。
(C系統のプログラミング言語はnullは値で、3値論理の3つ目ではない。)
さらに言えば、NULL = NULLがTRUEではないのは、クリーネ方式を採用したものだからですね。

DBとプログラミング言語の比較
  • C系統のプログラミング言語
    a != Null   aはnull値か?
  • DBの場合
    a != Null   aは未知なる値と異なるか?
DBの3値論理はどれ?
  • ウカシェヴィッチ:indeterminate(不定)を加えたもの。不定同士は同じ値である。i=i は true
  • クリーネ:undefinedness(未定義)を加えたもの。未定義同士はわからない。u=uはu、u<>uはu。
  • ボフバール:meaningless(無価値)を加えたもの。無価値と演算すると問答無用で無価値になる。
補足
  • IN句:サブクエリ結果にNULLが含まれると、FALSEを返さない。(TRUEかNULLが返る。)
  • EXISTS句:サブクエリ結果にNULLが含まれても、NULLは返さない。
コメント
PAGETOPへ

コメント送信

お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード

パスワードを入れておかないと、コメントの再編集ができません!

フリーエリア

takemori
Twitter : @takemori_kondo

1. Unityと戯れてます
2. Cake3は劣化じゃないRails

iOS
coming soon...

Windows
Html Editor - Nazuna
Managed DirectX サンプル集

beginning since
2006.08.17
renewaled on
2011.06.03

最新コメント

[2013/06/14 ミューネ]
[2012/08/30 ノートPC]