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

平成23年度特別 データベーススペシャリスト 午前Ⅱ 問11

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

問題

“社員”表から,男女それぞれの最年長社員を除くすべての社員を取り出す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抽出条件と結果の読み方

抽出条件と結果の対応を考えるときは、条件がどの行のどの列に関係し、複数の条件がどのように組み合わされているかを整理し、表示対象の決まり方を段階的に各段階で見直します。

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

一つの観点として、抽出条件を各行が条件を満たすかどうかという判定単位に分けて読み、条件同士の結び付きと結果への影響を対応付け、途中の思い込みを避けて確認してください。

視点

条件を列ごとの役割と行ごとの判定に分け、条件の組み合わせが抽出対象の範囲にどう影響するかを整理します。

確認ポイント

  • 各条件が参照している列と判定対象を区別する
  • 複数条件の結び付きと優先関係を整理する
  • 条件の変化が対象行の範囲に与える影響を確認する
正解と解説を見る

正解

ウ

解説

外側の社員と同じ性別の社員だけを副問合せの対象にし、その性別における生年月日の最小値を求める必要がある。生年月日がその最小値より後の社員を抽出するため、同じ性別で最小の生年月日に該当する社員が複数いれば、その全員が除外対象になる。

理由

外側のS1の性別と一致するS2だけを対象にMIN(生年月日)を求め、その値よりS1の生年月日が後である社員を抽出する。したがって、性別ごとの最小の生年月日に該当する社員を除外できる。主キーは社員番号だけなので、同じ最小生年月日の社員が複数存在する可能性もある。

比較

GROUP BYだけで性別ごとの複数行を返す副問合せは、単一値との比較に適さない。また、性別以外の条件をORで結ぶと対象範囲が広がり、別名を定義していない表別名をGROUP BYで参照する記述も成立しない。

選択肢ア

これは不正解だよ。GROUP BY S2.性別によって性別ごとの最小値を複数行で返すため、外側のS1の性別に応じた一つの比較値にならない。さらに、副問合せ内でS1の性別との相関条件も指定されておらず、外側の社員ごとの比較対象を限定できない。

選択肢イ

これは不正解だよ。WHERE条件が生年月日の大小関係または性別一致となっているため、同じ性別に限定されず、異なる性別の社員も対象になり得る。求めるのは外側の社員と同じ性別における最小生年月日なので、ORによって対象範囲が広がるこの条件は適切でない。

選択肢ウ(正解)

これは正解だよ。副問合せ内でS1とS2の性別を一致させるため、外側の社員と同じ性別の社員だけを対象にMIN(生年月日)を求められる。その最小値より後の生年月日を持つ社員が抽出され、最小生年月日に該当する社員は複数いても除外される。

選択肢エ

これは不正解だよ。副問合せのFROM句では表別名S2を定義していないのにGROUP BYでS2.性別を参照しているため、記述上の参照が成立しない。また、外側のS1との性別一致条件もなく、性別ごとの対象を正しく限定できない。

学習のポイント

相関副問合せによる性別ごとの最小値比較を理解する。

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

関連する過去問一覧

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