SkillStack
テクノロジ系10 / 25問

データベーススペシャリスト試験 令和6年度 秋期 午前II 問10

"従業員"表から、男女それぞれの最年長従業員を除く全ての従業員を取り出すSQL文とするために、aに入れる字句はどれか。ここで、"従業員"表の構造は次のとおりであり、実線の下線は主キーを表す。 従業員(従業員番号、従業員名、性別、生年月日)

〔SQL文〕  SELECT 従業員番号、従業員名 FROM 従業員 AS S1      WHERE 生年月日 > (「a」)

選択肢を押すと答え合わせができます。

正解と解説を見る

【正解】ウ

生年月日は、日付が古いほど年齢が高いことを表します。したがって、男女それぞれの最年長者の生年月日は、同じ性別の行のMIN(生年月日)で求められます。ウを入れた副問合せは、外側の現在行S1と性別が等しいS2だけを対象として最小の生年月日を返します。このように外側の行を参照する副問合せを相関副問合せといいます。

外側の条件は「S1.生年月日>同じ性別の最小生年月日」です。最年長者自身は最小値と等しいので除外され、それより後に生まれた従業員だけが残ります。男女に同じ最小生年月日の人が複数いる場合も、その全員が除外されます。

アは誤りです。性別でGROUP BYするため、男女それぞれの最小値という複数行を返します。しかし、比較演算子「>」の右辺に置くスカラー副問合せは1行だけを返す必要があり、正しく比較できません。

イは誤りです。条件がORなので、S1と同じ性別であれば生年月日の大小に関係なく全て対象になります。さらに、S1より古い生年月日の異性も対象になり得るため、同じ性別の最小値だけを求める条件ではありません。

エは誤りです。FROM句でS2という別名を定義していないのにGROUP BY S2.性別と記述しているため、S2を参照できません。また、仮に別名を補っても性別ごとの複数行を返すので、アと同じ問題が生じます。

【ポイント】 グループごとの最大値・最小値と各行を比較するときは、外側の行とグループ条件を対応させる相関副問合せが有効です。 日付ではMINが最も古い日、MAXが最も新しい日を表すことにも注意してください。

出典:令和6年度 秋期 データベーススペシャリスト試験 午前II 問10
※ 解説は SkillStack 編集部が作成したものです。Web 表示のため、図表の配置や表記を一部改めています。

この回の25問を、アプリで通しで解く

  • 本番と同じ問題数・制限時間で通し演習(模試モード)
  • 間違えた問題は自動で「復習すべき問題」に回る
  • 解説で分からない点はAIに質問できる
SkillStackで無料で始める