はじめに
null を検索対象とする場合は、is null や is not null を使う必要があります。null は、その項目に空値が格納されているのではなく、その項目の値がメモリに存在しない状態であるためです。
存在しないものは検索できないので、原則 null は、検索条件(= や <> など)の検索対象になりません。
気を付けたい SQL
対象テーブル(T)
Q | R |
---|---|
1 | 2 |
3 | 4 |
null | 5 |
NULL が含まれない SQL (1)
select * from T where Q <> 3
Q | R |
---|---|
1 | 2 |
NULL が含まれない SQL (2)
select count(Q) from T
count(Q) |
---|
2 |
NULL が含まれない SQL (3)
select SUM(Q) from T
SUM(Q) |
---|
4 |
NULL になっちゃう SQL
select Q + R from T
Q + R |
---|
3 |
7 |
null |
おまけ(SQL Server)
- isnull(A, B):Aの値がNULLでない場合はAを、NULLの場合はBを返す。
- nullif(A, B):A=Bの場合は、NULLを、A<>Bの場合はAを返す。
case when 分母 IS NULL OR 分母 = 0 then 分子 else 分子/分母 end
↓
分子 / isnull(nullif(分母,0),1)
おわりに
DBMSによっては、「= null」でも検索対象となる場合があります。
こういったお助け機能があるせいか、null を意識していない SQL がたくさんあったので、復習がてらにまとめてみました。