必ず受かる情報処理技術者試験

当サイトは、情報処理技術者試験に合格するためのWebサイトです。
ITパスポート試験,基本情報技術者,応用情報技術者,高度試験の過去問題と解答及び詳細な解説を掲載しています。
  1. トップページ
  2. データベーススペシャリスト
  3. 平成23年度特別問題一覧
  4. 平成23年度特別問題11-解答・解説-分析

平成23年度特別問題

問題11

“社員”表から、男女それぞれの最年長社員を除くすべての社員を取り出すSQL文とするために、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文とするために、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.性別

解答:ウ

<解説>

× サブクエリの中でグループ化を実行すると、照合する値として複数の行(2行)が返されてしまうのでエラーとなる。
× 外部クエリ(サブクエリの外側のSQL文)とサブクエリの行を結ぶ条件が設定されており、相関サブクエリとして機能する。しかし、「S1.性別 = S2.性別」という性別のほかに「S1.生年月日 > WHERE S2.生年月日」という条件も設定されている。この条件により、性別ごとの最年長社員ではなく、単純に全社員のうちの最年長社員の生年月日と比較されて しまう。
外部クエリ(サブクエリの外側のSQL文)とサブクエリの行を結ぶ条件が設定されており、相関サブクエリとして機能する。外部クエリとサブクエリの関連付けは「S1.性別 = S2.性別」と、性別のみを照合する条件になっているので、性別ごとに最年長社員の生年月日を取得できる。
× サブクエリの中でグループ化を実行すると、照合する値として複数の行(2行)が返されてしまうのでエラーとなる。