DBデータベーススペシャリスト試験 午前Ⅱ

平成30年度春期 データベーススペシャリスト 午前Ⅱ 問10

問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。

問題

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

選択肢

  1. ア
    SELECT MIN(生年月日) FROM 社員 AS S2 GROUP BY S2.性別
  2. イ
    SELECT MIN(生年月日) FROM 社員 AS S2 WHERE S1.生年月日 > S2.生年月日 OR S1.性別 = S2.性別
  3. ウ
    SELECT MIN(生年月日) FROM 社員 AS S2 WHERE S1.性別 = S2.性別
  4. エ
    SELECT MIN(生年月日) FROM 社員 GROUP BY S2.性別
解き方のヒントを見る

SQL抽出条件を読み解く視点

SQLの抽出条件と結果を対応づけるときは、条件が評価される対象、組み合わせ方、NULLや重複の扱いに注目し、各選択肢の説明が同じ前提で比較されているかを整理しましょう。

この問題で問われていること

一つの観点として、WHERE句などの条件を列ごとに分解し、AND・OR・否定・NULLの扱いが、各行を残すかどうかの判断にどう影響するかを丁寧に確認してください。

視点

抽出結果を考える際は、条件を構成する要素と論理的な組み合わせを分けて捉え、対象となる値の状態や行同士の違いを整理すると、判断の根拠を確認しやすくなります。

確認ポイント

  • 条件が参照する列と、各行の値の状態を整理する
  • 複数条件の組み合わせや否定の有無を確認する
  • NULL、重複、境界値が結果の見え方に関係するか確認する
正解と解説を見る

正解

ウ

解説

男女それぞれについて生年月日の最小値を求め、外側の社員の生年月日がその値より後であるかを判定します。これにより各性別の最年長社員だけを除外できます。

理由

生年月日は日付が早いほど年齢が高く、各性別の最年長社員はその性別で生年月日が最小の社員です。内側のS2を外側のS1と同じ性別に限定してMIN(生年月日)を求め、S1の生年月日がそれより後の社員だけを抽出します。

比較

相関条件がないと男女をまとめた最小値になり、性別ごとの除外になりません。また、ORを使うと性別または日付の条件を満たす行まで対象となり、意図した除外範囲が崩れます。GROUP BYだけでは外側のS1との対応付けもできません。

選択肢ア

これは不正解だよ。GROUP BYで性別ごとの最小生年月日を求めようとしていますが、サブクエリの結果は性別ごとの複数行になります。外側のS1の性別に対応する一つの値を相関して返す形ではないため、WHERE句の比較対象として適切ではありません。

選択肢イ

これは不正解だよ。WHERE句の条件が日付比較と性別一致のORになっているため、同じ性別であるだけの社員や、日付条件だけを満たす社員も内側の集合に含まれます。性別ごとの最小生年月日を正しく求める条件になっていません。

選択肢ウ(正解)

これは正解だよ。S1と同じ性別のS2だけを対象にMIN(生年月日)を求めるので、外側の社員に対応する性別の最年長社員の生年月日が得られます。S1の生年月日がその値より後の社員を選ぶことで、男女それぞれの最年長社員を除外できます。

選択肢エ

これは不正解だよ。FROM句でS2という別名を定義していないのにGROUP BY S2.性別と記述しているため、SQL文として参照関係が成立しません。また、仮に性別ごとの集約を意図していても、外側のS1と対応する相関条件がありません。

学習のポイント

相関サブクエリとMIN関数によるグループ別の最小値の求め方を学びます。

出典:独立行政法人 情報処理推進機構(IPA)平成30年度春期 データベーススペシャリスト試験 午前Ⅱ 問10(公式資料:問題冊子(PDF) / 解答例)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針