SkillStack
テクノロジ系10 / 25問

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

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

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

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

正解と解説を見る

【正解】ウ

生年月日の値が小さいほど早く生まれており、年齢が高いことを表します。ウの相関副問合せは、外側の社員S1と性別が同じ社員だけをS2から選び、その中の最小の生年月日を求めます。この最小値が、その性別における最年長社員の生年月日です。外側のWHERE句ではS1の生年月日がその最小値より大きいことを要求するので、最年長社員だけが除かれ、それより後に生まれた社員が抽出されます。男女それぞれについて副問合せが評価されるため、目的に一致します。同じ最小生年月日の社員が複数いれば、その全員が除かれます。

アは誤りです。性別でGROUP BYしているので、男女が存在すれば副問合せが2行を返します。一つの値との比較を行う「生年月日>(副問合せ)」には複数行を返す副問合せを使用できません。

イは誤りです。OR条件によって、S1と同性の全社員に加え、S1より早く生まれた異性の社員まで集計対象になり得ます。そのため、求める最小値は必ずしもS1と同性の最年長者の生年月日にはなりません。

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

【ポイント】 集約関数を相関副問合せで使うと、外側の行が属するグループの最小値や最大値と比較できます。生年月日ではMINが最年長、MAXが最年少を表す点に注意してください。

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

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

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