ray88’s diary

お仕事で困ったとき用の自分用の覚書

SQL指南書 比較述語とNULL⑤ 限定述語と極値関数は同値ではない

SQL 指南書集 目次 - ray88’s diary


【例題】
前回ALL述語で記述した以下の例題を
極値関数で書き直すと次のようになる(ALL関数では元データにNULL値を含む場合正しく出力されない)

--Bクラスの東京在住の最も若い生徒より若いAクラスの生徒を選択する
SELECT *
	FROM class_a
WHERE age < (SELECT MIN(age)
				FROM class_b
			 	WHERE city = '東京');

出力結果
元データにNULL値が含まれる場合でも正しく出力される

極値関数は集計の際にNULLを排除するというと特性を持っている

■ただし、常にALL述語と極値関数を使用した際の結果が同一とは限らない
 ・ALL述語:彼は東京在住の生徒の誰よりも若い
 ・極値:彼は東京在住の最も若い生徒よりも若い

以下のように bクラス に東京在住の生徒がいない場合
ALL述語を使用→ a クラス全員を出力する
極値関数を使用→ 1行も選択されない:入力が空テーブル(空集合)の場合はNULLを返す仕様のため