FC2ブログ

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[SQL] NULLの比較について

以下のようなテーブル(TEST_TBL)があるとします。



で、このテーブルの 'A_CODE' が空(NULL)のデータを
抽出したいとします。

SELECT * FROM TEST_TBL
WHERE A_CODE = NULL

このように "= NULL" で比較するのはNG。
結果は1件も抽出されません。

NULLはイコールで比較できないんですね。


ということで、以下のように "IS NULL" を使います。

SELECT * FROM TEST_TBL
WHERE A_CODE IS NULL



ちゃんとNULLのレコードが抽出できました。



ちなみに、以下の方法で "=" を使用してNULLのものを
抽出できそうですが、問題がちらほらとあります。

SELECT * FROM TEST_TBL
WHERE NVL(A_CODE, 'NULL') = 'NULL'

問題点は、もし "A_CODE" に 'NULL' という文字列の
データが入っていたら、抽出されてしまう。
あとは、WHERE句でNVL関数を使用してしまっているため、
インデックスは有効にならず、全表走査してしまうので
パフォーマンスが悪くなる。


ということで、やっぱり "IS NULL" での判定がいいのですな。










コメントの投稿

非公開コメント

プロフィール

hiiro

Author:hiiro

最新記事
カテゴリ
月別アーカイブ
最新コメント
最新トラックバック
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
Counter
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。