トップ過去問一覧応用情報技術者 平成20年・秋 > 問66
問66

"社員"表から、男女それぞれの最年長社員を除くすべての社員を取り出すSQL文とするために、aに入る副問合せはどれか。ここで、"社員"表は次の構造とし、下線部は主キーを表す。

 


   社員 (社員番号, 社員名, 性別, 生年月日)

   SELECT 社員番号, 社員名 FROM 社員 AS S1 WHERE 生年月日 > ()   

○正解
×不正解
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.性別
解説

”男女それぞれの最年長社員”というところがちょっと面倒です。aに入る値は、S1表の性別によって変えなければいけません。S1.性別が男なら男の最年長者の生年月日、女なら女の最年長者の生年月日を入れる必要があります。

 

>SELECT MIN(生年月日) FROM 社員 AS S2 WHERE S1.性別=S2.性別

正解。本クエリの方のS1.性別を使うところがポイントです。S1.性別が男なら、男の中での最年長者の生年月日が得られます。女の場合も同様です。

 

>SELECT MIN(生年月日) FROM 社員 AS S2 GROUP BY S2.性別

男女に関わらず全体における最年長者の生年月日が出力されます。

 

>SELECT MIN(生年月日) FROM 社員 GROUP BY S2.性別

S2の定義がどこにもないので構文エラーになります。

 

>SELECT MIN(生年月日) FROM 社員 AS S2 WHERE S1.生年月日 > S2.生年月日 OR S1.性別=S2.性別 

男女に関わらず全体における最年長者の生年月日が出力されます。性別を条件に入れているのは良いのですが、ORで結ばれているもうひとつの条件が台無しにしています。


無料学習システムはこちら
→間違えた問題を繰り返し学習
→分野別学習
→模擬試験モード
デモサイト
無料ユーザ登録

問題文や解説文の内容の正確性については、できるかぎりチェックをしていますが、間違いがある可能性があります。 十分ご注意の上、参考までにご利用ください。