質問: 基本情報技術者 平成18年 春期 設問2 SQL 文 (3) と同じ実行結果が得られると考え,SQL 文 (4) を実行したところ,異なる結果が得られた。
回答: ALL はスカラー値と値のセットとを指定された演算子で比較し、ひとつでも結果が偽であれば偽を返し、そうでなければ真を返します。 年齢 < ALL (SELECT 年齢 FROM 家族表 WHERE 家族表.社員ID = 社員表.社員ID)) この問題の場合、年齢がスカラー値で、< が演算子、() の中が値のセットです。 家族の中に社員より若いものがいたときに偽を返します。つまり、家族がいない場合は真を返すことになります。ここが誤解を招きやすいところです。 一方、MIN は対象となる列がない場合は NULL を返します。 SQL文(3)は社員に家族がいない場合、社員の年齢とNULLを比較するので結果は偽です。 つまり、SQL(3)では家族がいない社員は抽出されず、SQL(4)では家族のいない社員も抽出されます。