相関副問合せによる男女別最年長社員の除外

生年月日において「最年長」の社員は生年月日が最も古い(最小値 MIN(生年月日) をもつ)社員です。 「男女それぞれの最年長社員を除く」ためには、外側の行 S1 と同じ性別のグループ内における最小生年月日を求め、それよりも生年月日が大きい( 生年月日 > 最小生年月日 )社員を抽出します。 スカラ副問合せとして外側の行 S1 と相関させるため、 WHERE S1.性別 = S2.性別 を条件に指定して同一性別の最小生年月日を返します。したがって ウ が適切です。 GROUP BY を用いると男女2行の結果が返るため、単一の比較演算子 > の右辺に直接指定できず実行時エラーとなります。 WHERE句に余分な条件 S1.生年月日 > S2.生年月日 が含まれており、意図した最年長判定になりません。 FROM句で別名 S2 が定義されていないため文法エラーとなります。

“社員” 表から,男女それぞれの最年長社員を除く全ての社員を取り出すSQL文とするために, a に入れる字句はどれか。ここで,“社員” 表の構造は次のとおりであり,実線の下線は主キーを表す。

社員 (社員番号,社員名,性別,生年月日)

〔SQL文〕

sql
SELECT 社員番号, 社員名 FROM 社員 AS S1
  WHERE 生年月日 > ( a )
出典2020r02o_db_am2_問10
ア
SELECT MIN(生年月日) FROM 社員 AS S2 GROUP BY S2.性別
イ
SELECT MIN(生年月日) FROM 社員 AS S2 WHERE S1.生年月日 > S2.生年月日 OR S1.性別 = S2.性別
ウ
SELECT MIN(生年月日) FROM 社員 AS S2 WHERE S1.性別 = S2.性別
エ
SELECT MIN(生年月日) FROM 社員 GROUP BY S2.性別