見出し画像

狙った分野の午後問題をやっつけたいよPart4・・・従業員の通勤情報を管理する関係データベース『設問3』

#基本情報技術者試験 #平成28年 #秋期 #午後 #データベース #SQL

準備~設問1、それと設問2を確認してね。

そして、設問3レリゴー!

問題文の大事そうなところ、まとめます。
 (1)通勤経路が変わるかもしれない人の従業員番号を抽出する
 (2)同じ従業員番号は一つしか表示させない
 (3)影響を受けるのは、“情報都市線”と”駒込バス”

それで、解答群は・・・

長~い!

同じように見えるから、共通点探しからしようかな。
同じことが書いてあるところを黄色くすると・・・

きいろ~い!
ということは、違いは少ないということね。

違うところは、
 ・アだけが=を使ってて、イ~エはINを使っている
 ・INを使っているイ~エの中でも、イだけがGROUP BYをしていない
 ・INもGROUP BYもあるウとエは、グループ化に使っている項目が違う

だな。

まず、は違うと思った。
なぜかというと、副問い合わせで、情報都市線または駒込バスの交通機関コードが取り出されるわけだから、その取り出されるデータの件数は1件とは限らない。そしたら、=で比較することはできない。

イ~エは、グループ化が必要かどうかを考えてみようと思った。
GROUP BYは副問い合わせの外側に書いてあるので、問題文に書いてあったSQL文のほう(主問い合わせ)を思い出して考えなきゃいけない。

SELECT 通勤費表.従業員番号 FROM 通勤費表 WHERE [       f        ]

これを見ると、グループ化なんて必要ないって気がする。
だって、いつもなら、GROUP BYした時は、だいたいAVGとかSUMとかの集合関数を使って、グループごとの平均を表示したりなどなどをしてるから。今回はそれがないから。
じゃあイなのかな?
でも、GROUP BYを使っている解答は2つあるしな・・・。

大事なことリストをもう一度思い出してみる。

 (1)通勤経路が変わるかもしれない人の従業員番号を抽出する (2)同じ従業員番号は一つしか表示させない (3)影響を受けるのは、“情報都市線”と”駒込バス”

(1)は、SELECT 通勤費表.従業員番号のところ。
(2)は、・・・。
(3)は、副問い合わせの** IN(SELECT 交通機関表.交通機関コード・・・) **のところ。 

つまり、(1)と(3)は実現できているけど、(2)がまだってことよね?
同じデータは一つしか表示させないって時には、いつもならDISTINCTキーワードを使うけど、今回それは見当たらない。

なるほど~!DISTINCTを使わない代わりに、グループを作るんだな。
従業員番号ごとにグループを作れば、SELECT 通勤費表.従業員番号でも、同じ従業員番号が表示されることはなくなる。

この通勤費表を見るとわかるように、同じ従業員番号が二つ以上登場することはあるんだから、何もしなければ二つ以上表示されてしまう可能性があるね。たしかに、たしかに。
よし、に決めた。

いいなと思ったら応援しよう!