pafuイーランスクール 学んでできる

メニューへ戻る

SQL文 (データベース分野)

平成18年春期 問1 問題確認

解説
SQL文の内容を問う問題。
SQL文の内容は、午前の問題でも出題される可能性が高いので頻繁に使用されるSQL文については理解しておいたほうがいいだろう。SQL文の問題は、比較的簡単なので、あせらずじっくり考えていけば必ず解答できる。(その分ワナがあるのでひっかからないように)
DISTINCTやALL、LIKE(ワイルドカード)、BETWEEN、サブクエリー、MAX、MIN、ANYなどの代表的なものは覚えておく。

設問1
SQL文の①、②を実行した後、どのデータを抽出できたか。
を問われる問題。
ゆっくり問題を見ていこう。


WHERE 年齢 > (SELECT AVG(年齢)
          FROM 家族表)
ORDER BY 社員ID

が条件である。
まずは、家族表の平均年齢を算出する。
これは簡単なので省略する。AVG = 35 であるので
35歳よりも年齢が上の人を社員表より選ぶ。
が、社員は34歳の人が最年長なので該当者が0である。
よって答えは「カ」である。


WHERE 年齢 > (SELECT AVG(年齢)
                  FROM 家族表
                  WHERE 家族表.社員ID = 社員表.社員ID)
ORDER BY 社員ID

とある。条件に社員IDが同じもので。という条件が加えられる。
つまりここでは、
社員IDが同じ人の平均年齢より上である。
という条件を社員IDごとに調べるのである。

まず浅井さんについてみてみよう。
浅井さんの社員IDは「S035」である。
同じ社員IDを家族表より選ぶび、平均年齢を計算すると
「S035」の平均年齢は37である。
よって浅井さんは条件を満たさない。

同じように比較していくと
「S612」は45で条件を満たさない
「S052」は家族がおらず、平均が出せないので対象外
「S054」は12で満たす。
「S042」は17で満たす。
「S609」は56で満たさない
「S046」は家族がいないので対象外。
よって答えは「イ」である

社員IDが同じ人全員の平均と解釈すると
①と同じことをしてしまうので注意すること。

設問2
③、④についての説明文の中の[c][d]について解答していくもの

[c]について
④のSQL文は、ALLを使用している。ALLが何を意味するかは覚えておこう
ALLは値が重複しても抽出結果として返します。
その反対に、重複しているものを除外するのはDISTINCTです。
つまり④は
家族表と社員表の社員IDが同じものの年齢を抽出し
その全てよりも年齢が小さければ抽出しなさい。
というもの。

これだけの説明をみたら③とどこが違うのか?と思われるかも知れないが
ALLの特性は、もう一つあり「値が無くても真となる」という性質がある。
よって、社員表にはあるが、家族表に無い場合
MINの③では値が取れないので対象外。となるが
ALLの④では、値が取れなくても真となるので、条件を満たしている。
と判定される。
ALLについての特性を熟知していれば簡単な問題であっただろう。
よって空欄[c]の答えは「ア 家族がいない 」となる。

[d]について
これはALLとEXISTSの関係を知っているかどうかを問われている。
EXISTSとは1件でも該当すれば真であり、1件もなければ偽を返す。
つまりALL = NOT EXISTS であることがわかれば
イとエにしぼられる。

また、ここで問われている内容は、社員の抽出結果である。
③では、家族がいない人は、はじかれているので③と④の違いを補うためには
⑤の条件で、家族がいない人が対象となるようなSQL文を探せばよい
つまり条件だけみるとウかエのどちらかである。
ALLの特性からNOT EXISTS でなければならないので
答えは「エ」となる。

ALLとEXISTSの特性は覚えておいたほうがいいだろう。

まっち~様 ご投稿

メニューへ戻る

pafuイーランスクール

pafuイーランスクール 学んでできる