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.aspxOracle : IsNull/NVL
構文
ISNULL(value1 , value2) NVL(value1 , value2) * value1 : NULL かどうかを調べる式 * value2 : check_expression が NULL の場合に返される式
サンプル
NVL(stackNumber , 0) /* NVL(在庫数 , 0) */
参考資料
http://oracle.se-free.com/dml/01_null.htmlhttp://www.shift-the-oracle.com/sql/functions/nvl-coalesce.html
パフォーマンスに関して
* IS NULL/IS NOT NULLを指定したときは,インデックスを定義したフィールドであっても、全表走査が行われるため、遅くなるhttp://blogs.yahoo.co.jp/dk521123/17141399.html
対応策
コード
* Nullに