“社員”表から、男女それぞれの最年長社員を除くすべての社員を取り出すSQL文とするために、aに入る問合せはどれか。
ここで、“社員”表は次の構造とし、下線部は主キーを表す。
社員(社員番号, 社員名, 性別, 生年月日)
SELECT 社員番号, 社員名 FROM 社員 AS S1
WHERE 生年月日 > ( 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)を選択し生年月日を比較しようとしているので、 a に入るのは、もう一人の社員(S2)を選択し、S1と比較し年長の社員の生年月日を出力すれば良いので、そのSQL文は『S1とS2が同性のとき、年長の社員の生年月日を出力』になり
SELECT MIN(生年月日) FROM 社員 AS S2
WHERE S1.性別=S2.性別
(ウ)になります。
※生年月日のデータの値が小さい方が年長になります。
【キーワード】
・SQL文