【SQL】【SQL Server】【Oracle】DB Nullと空文字について

DB Nullと空文字

* SQL Server:nullと空文字は、別物として扱う
* Oracle:nullと空文字は、nullとして扱う
* 他のDBについては、「SELECT 1 WHERE '' = ''」「SELECT 1 WHERE '' IS NULL」を試してみるといい

比較の仕方

SQL Server

* IS NULLを使用する

select * from TestTable
where 
Id = 1
AND Name IS NULL

参考資料

http://d.hatena.ne.jp/kagamihoge/20060411/1144750665

なぜ「= NULL」ではなく「IS NULL」なのか?

 * NULLとは、「そこに値がない」というマークに過ぎない
 * つまり、NULLは値ではなく、比較述語が使えない

NULLだった場合の置き換え

SQL Server : IsNull()

ISNULL ( check_expression , replacement_value )

 * check_expression : NULL かどうかを調べる式
 * replacement_value : check_expression が NULL の場合に返される式

参考資料

http://msdn.microsoft.com/ja-jp/library/ms184325.aspx

Oracle : IsNull/NVL

構文

ISNULL(value1 , value2)
NVL(value1 , value2)

 * value1 : NULL かどうかを調べる式
 * value2 : check_expression が NULL の場合に返される式

サンプル

NVL(stackNumber , 0) /* NVL(在庫数 , 0) */


パフォーマンスに関して

 * IS NULL/IS NOT NULLを指定したときは,インデックスを定義したフィールドであっても、全表走査が行われるため、遅くなる
http://blogs.yahoo.co.jp/dk521123/17141399.html

対応策

コード

 * Nullに