SQL 指南書集 目次 - ray88’s diary
■入力が空テーブルの場合、極値関数と同様に
COUNT関数以外の集約関数(AVG, SUM 等)もNULLを返す
【例題】
東京在住の生徒の平均年齢より若いAクラスの生徒を選択する
--東京在住の生徒の平均年齢より若いAクラスの生徒を選択するSQL? SELECT * FROM class_a WHERE age < (SELECT AVG(age) FROM class_b WHERE city = '東京');
出力結果
※東京在住の生徒がいない場合、AVG関数はNULLを返すため、
WHERE句が常にunknownになり、1行も選択されない
【対処方法について】
集約関数や極値関数がNULLを返すことについては、関数の仕様が原因なので、
NULLを事前に何らかの値に変換するか、テーブル列にNOT NULL制約をつけるしかない。
しかし、テーブル列に NOT NULL制約を不可するくらいでは根絶できないケースが多い。
そのため、プログラミングの際はよく注意する必要がある。