IPA過去問ドリル

令和4年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問12

テクノロジ/データベース

“社員”表から,男女それぞれの最年長社員を除く全ての社員を取り出す SQL 文とするために,a に入れる字句はどれか。ここで,“社員”表の構造は次のとおりであり,実線の下線は主キーを表す。 社員(社員番号, 社員名, 性別, 生年月日) ※社員番号が主キー 〔SQL 文〕 SELECT 社員番号, 社員名 FROM 社員 AS S1 WHERE 生年月日 > ([ a ])

出典:令和4年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問12

正解:ウ

解説

最年長社員とは生年月日が最も古い(値が最小)社員のことです。設問のSQL文は,各社員S1について,同じ性別の社員グループの中での最小の生年月日(=最年長者の生年月日)よりも自分の生年月日が大きい(=自分より年下である)社員だけを抽出しようとしています。したがって副問合せでは,S1と同じ性別の社員に絞り込んだ上でMIN(生年月日)を求める必要があります。

選択肢ごとの解説

  • 誤り。GROUP BY S2.性別だけでは性別ごとの最小生年月日が複数行返ってしまい,比較演算子の右辺に単一の値を要求するスカラー副問合せとして機能しません。
  • 誤り。OR条件でS1.性別=S2.性別を加えても全性別の生年月日が比較対象に混在してしまい,性別ごとに正しく最年長者を絞り込むことができません。
  • 正しい。WHERE句でS1.性別=S2.性別と条件を付けることで,S1と同じ性別の社員に限定した中での最小の生年月日(その性別の最年長者の生年月日)を求めることができます。
  • 誤り。FROM句で社員に別名S2を付けていないため,SELECT句やGROUP BY句でS2を参照するとエラーになり,構文として成立しません。
データベーススペシャリストの過去問を演習モードで解く