2011年2月2日水曜日

NULLを含む列を検索条件に使用する場合

●NULLを含む列を検索条件に使用する場合
・NULLを含むレコードは対象から除外される

--------------------------------------------------
t1テーブル
select * from t1
f1 | f2
------+------
1 | A
2 | NULL
3 | C
4 | D

select * from t1 where f2 <> 'A'
f1 | f2
------+------
3 | C
4 | D
→NULLのレコードは選択されない

select * from t1 where (f2 <> 'A') or (f2 is null)
f1 | f2
------+------
2 | NULL
3 | C
4 | D
→'A'以外のレコード、又は、NULLのレコード
--------------------------------------------------

・NULL以外のレコードを選択する場合、「<フィールド名> <> null」は何も選択されない
--------------------------------------------------
t1テーブル
select * from t1
f1 | f2
------+------
1 | A
2 | NULL
3 | C
4 | D

select * from t1 where f2 <> null
f1 | f2
------+------

0件選択
→「f2がNULL以外のレコードを取得したい」場合は、通常通り「is not null」を使用する

select * from t1 where f2 is not null
f1 | f2
------+------
1 | A
3 | C
4 | D
→f2がNULL以外のレコードを選択
--------------------------------------------------