はじめに
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 がたくさんあったので、復習がてらにまとめてみました。