IPA公式正解:ウ SELECT MIN(生年月日) FROM 社員 AS S2
WHERE S1.性別 = S2.性別
※ 正解はIPA公表の解答です。解説は当サイトが生成AIを用いて作成しています。誤りにお気づきの場合はお問い合わせください。
【解説】正解は選択肢【ウ】です。最年長社員は生年月日が最も古い(MIN(生年月日))社員です。外側クエリ(S1)の性別と同じ性別の最年長生年月日を相関副問合せ「WHERE S1.性別 = S2.性別」で求め、「生年月日 >」でそれより誕生日が遅い社員を抽出します。
【詳細解説】■ 本問の核心・解法のポイント
相関副問合せ(Correlated Subquery)を用いて、グループごとの最小値を求め、それを外側クエリの条件と比較する問題です。
「最年長」とは、生年月日が最も古い(値が最も小さい、すなわち MIN(生年月日))社員を指します。
男女それぞれの最年長社員を除くには、外側の社員 S1 の性別と同じ性別の社員グループにおける最少生年月日(最年長社員の生年月日)を副問合せで取得し、それよりも生年月日が大きい(遅く生まれた)社員を抽出すればよいことになります。
副問合せ内で外側の S1.性別 と内側の S2.性別 を一致させる条件(`WHERE S1.性別 = S2.性別`)を記述することで、S1 の性別ごとの最年長生年月日を単一値(スカラ値)として得ることができます。
・各選択肢の徹底解説:
・ア:GROUP BY でグループ化すると複数行(男性と女性の2行)が返されるため、比較演算子 `>` の右辺に直接置くことができずエラーになります(単一値が必要)。
・イ:WHERE句に余計な条件が含まれており、正しく各性別の最小生年月日を求めることができません。
・ウ:【選択肢ウ★】外側のレコードの性別と一致する社員の中から生年月日の最小値(最年長)を求める相関副問合せとなっており、意図した通りの結果が得られます。
・エ:GROUP BY を使っており複数行が返ること、および FROM句に別名 S2 の定義がないため構文エラーになります。
よって正解はウです。