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

令和2年度10月 データベーススペシャリスト 午前Ⅱ 問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の抽出条件と結果の対応を考えるときは、条件がどの行や値の組合せに適用されるかを順に整理し、条件同士の関係、対象範囲、結果に現れる単位を丁寧に照合していきます。

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

確認の中心は、各条件がどの対象に作用し、複数条件がある場合にどの範囲へ重なって適用されるかを、結果の行ごとに対応づけ、見落としや重複がないか慎重に考えることです。

視点

抽出結果を眺める前に、条件を対象・関係・適用範囲の観点で分解し、条件を一つずつ結果候補へ対応づけて整理します。

確認ポイント

  • 条件ごとに対象となる列や値の範囲を確認する
  • 複数条件の組合せが同じ行にどう関係するか整理する
  • 想定した対象範囲と抽出結果の行を照合する
正解と解説を見る

正解

ウ

解説

最年長社員は性別ごとに生年月日が最も早い社員です。したがって、外側の社員と同じ性別に限定した社員集合から最小の生年月日を求め、それより後の日付の社員だけを取り出す相関サブクエリが必要になる。

理由

生年月日は日付が早いほど年齢が高いので、性別ごとの最年長者はその性別における生年月日の最小値を持つ。外側のS1と同じ性別のS2だけを対象にMINを求め、S1の生年月日がその値より後である社員を選ぶことで、男女それぞれの最年長者を除外できる。

比較

この設問では、単に全社員の最小値を求めるのではなく、外側の社員の性別に応じて比較対象を変える必要がある。また、GROUP BYだけで複数行を返す形や、性別条件をORで緩める形では、WHERE句の単一値比較として意図した結果にならない。

選択肢ア

これは不正解だよ。性別ごとにGROUP BYして生年月日の最小値を求める考え方自体は近いが、サブクエリは性別ごとの複数行を返す。外側の生年月日との比較で必要なのは、S1の性別に対応する一つの値なので、この形では問合せの条件を満たさない。

選択肢イ

これは不正解だよ。WHERE句が生年月日の比較と性別の一致をORで結んでいるため、性別が異なっても生年月日条件だけで対象に含まれる。さらに、同じ性別の場合は生年月日条件を満たさない行まで通る可能性があり、性別ごとの最年長者だけを基準にする比較になっていない。

選択肢ウ(正解)

これは正解だよ。サブクエリ内でS1とS2の性別を一致させるため、外側の社員と同じ性別の社員だけを比較対象にできる。その集合の生年月日の最小値は同じ性別の最年長者を表し、S1の生年月日がそれより後である社員だけを取り出せる。

選択肢エ

これは不正解だよ。サブクエリのFROM句でS2という別名を付けていないのに、GROUP BYではS2.性別を参照しているため、別名の扱いが不整合である。また、性別ごとに集約した結果を返す構造であり、外側のS1の性別に対応する単一の最小値を求める相関条件もない。

学習のポイント

相関サブクエリとGROUP BYによる集約範囲の違いを理解する。

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

関連する過去問一覧

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