データベーススペシャリスト試験攻略のツボ(9)

「SQL文を選択する」問題


西沢直木
2009/1/26

 本連載では、テクニカルエンジニア(データベース)試験に対応できる知識を確認していきます。多岐にわたる知識が問われる試験ですので、受験する方はもちろん、日常業務ではあまり使うことのない技術知識の確認にも役立ててください。
目次
今回の出題範囲
17年-午前問題-問38/19年-午前問題-問35/19年-午前問題-問34








問9-2 サブクエリに当てはまるSQL文を選択

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

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

 SELECT 社員番号, 社員名 FROM 社員 AS S1
   WHERE 生年月日 > ( a )
SELECT MIN(生年月日) FROM 社員 AS S2
  GROUP BY S2.性別
SELECT MIN(生年月日) FROM 社員 AS S2
  WHERE S1.生年月日 > WHERE S2.生年月日
  OR S1.性別 = S2.性別
SELECT MIN(生年月日) FROM 社員 AS S2
  WHERE S1.性別 = S2.性別
SELECT MIN(生年月日) FROM 社員
  GROUP BY S2.性別
(19年-午前問題-問35)

答え

解説

 「最年長社員を除くすべての社員」を取り出すので、該当する生年月日が1つだけであれば、aには「SELECT MIN(生年月日) FROM 社員」のような単純なSELECT文が当てはまります。ここでは、問題文の「男女それぞれ」という記述から、性別ごとに照合する生年月日が異なる点がポイントです。

 SELECT文で取得したデータの値に応じて、照合するサブクエリの値を切り替えられるSQL文に、相関サブクエリがあります。例えば、「男性の場合は1970年1月1日、女性の場合は1975年9月9日と比較」などのように機能させることができます。そのような選択肢があるか調べます。

 選択肢「ア」のようにサブクエリの中でグループ化を実行すると、照合する値として複数の行が返されてしまうのでエラーになります。また、選択肢「エ」も選択肢「ア」からエイリアスを取り除いただけなので正解ではありません。

 選択肢「イ」と「ウ」はともに、外部クエリ(サブクエリの外側のSQL文)とサブクエリの行を結ぶ条件が設定されており、相関サブクエリとして機能します。しかし、選択肢「イ」は、「S1.性別 = S2.性別」という性別のほかに「S1.生年月日 > WHERE S2.生年月日」という条件も設定されています。この条件により、性別ごとの最年長社員ではなく、単純に全社員のうちの最年長社員の生年月日と比較されてしまうため、正解ではありません。

 選択肢「ウ」も相関サブクエリの形式になっています。外部クエリとサブクエリの関連付けは「S1.性別 = S2.性別」と、性別のみを照合する条件になっているので、性別ごとに最年長社員の生年月日を取得できます。従って、選択肢「ウ」が正解です。

前のページへ 2/3 次のページへ

Index
データベーススペシャリスト試験攻略のツボ(9)
「SQL文を選択する」問題
問9-1 問題文の条件を満たすSQL文を選択
問9-2 サブクエリに当てはまるSQL文を選択
問9-3 問題文と同じ結果になるSQL文を選択

データベーススペシャリスト試験攻略のツボ


Database Expert フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Database Expert 記事ランキング

本日月間