戦国IT - 情報処理技術者試験の過去問対策サイト
お知らせお問い合わせ料金プラン

データベーススペシャリスト 2024年 午前210


問題文

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

選択肢

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.性別

従業員表から男女別最年長者を除くSQL文の作成【午前2 解説】

要点まとめ

  • 結論:男女それぞれの最年長従業員を除くには、性別ごとの最小生年月日を基準に比較する必要があります。
  • 根拠:最年長者は生年月日が最も古い(最小)ため、性別ごとに最小生年月日を取得し、それより後の生年月日の従業員を抽出します。
  • 差がつくポイント:性別ごとの最小値を正しく参照し、WHERE句で性別が一致する条件を付けることが重要です。

正解の理由

選択肢ウは「SELECT MIN(生年月日) FROM 従業員 AS S2 WHERE S1.性別 = S2.性別」となっており、S1の性別と一致するS2の生年月日の最小値(最年長者の生年月日)を取得しています。
これにより、男女別の最年長者の生年月日を正確に比較でき、WHERE句の「生年月日 > (a)」で最年長者を除いた全従業員を抽出できます。

よくある誤解

  • GROUP BYを使うだけで最年長者を除けると思い込み、性別の条件をWHERE句に入れない。
  • 生年月日の比較条件を誤って「>」ではなく「<」にしてしまう。

解法ステップ

  1. 最年長者は生年月日が最も古い(最小)ことを理解する。
  2. 男女別に最小の生年月日を取得する必要があるため、性別ごとにグループ化する。
  3. WHERE句でS1(外側の従業員)とS2(内側の従業員)の性別を一致させる条件を入れる。
  4. 生年月日がその最小値より後の従業員を抽出する条件を設定する。
  5. SQL文の(a)部分に該当する字句を選択肢から選ぶ。

選択肢別の誤答解説

  • ア: GROUP BYで性別ごとの最小生年月日を取得しているが、WHERE句で性別の一致を指定していないため、正しく比較できない。
  • イ: WHERE句の条件が「S1.生年月日 > S2.生年月日 OR S1.性別 = S2.性別」となり、論理が不適切で正しい最年長者の抽出ができない。
  • ウ: 性別が一致するS2の最小生年月日を取得し、正しく最年長者を除外できるため正解。
  • エ: GROUP BY句でS2が未定義のため文法エラー。

補足コラム

SQLでグループごとの最小値や最大値を取得する際は、サブクエリ内で対象のグループ条件をWHERE句やJOIN句で正しく指定することが重要です。
また、最年長者を除外する場合は「生年月日 > 最小生年月日」という条件で抽出するのが基本的な考え方です。

FAQ

Q: なぜGROUP BYだけでは不十分なのですか?
A: GROUP BYはグループごとの集計を行いますが、外側の行と正しく対応させるためには性別の一致条件をWHERE句などで指定する必要があります。
Q: 生年月日が同じ最年長者が複数いる場合はどうなりますか?
A: 生年月日が最小の従業員全員が除外されます。条件は「生年月日 > 最小生年月日」なので、同じ生年月日の人は除外対象です。

関連キーワード: SQL, サブクエリ、GROUP BY, 最年長者抽出、生年月日比較、性別条件、WHERE句、集約関数、MIN関数
← 前の問題へ次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

データベーススペシャリスト
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてプライバシーポリシー利用規約特商法表記開発者について