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

メニューへ戻る

正規化とSQL文 (データベース分野)

平成15年秋期 問1 問題確認

解説
【設問1】
aについて:
まず、このSQL文の意味は、create view スクール別受講状況表というビュー名で、ビュー別名が、スクール名、地区名、受講生数、講師数という名前のビューを作成する文である。当然、ビューの本体は、as select文以下の内容により作成されるので、as以下のselect文には、ビュー列名に当てはまる元列名を書き、列を選択する必要がある。よってスクール名に対応するのはS.スクール名、地区名はT.地区名、受講生数は、受講生番号を足すのではなく数える(カウント)するのでCOUNT(J.受講生番号)、講師数はS.講師数となるので、正解はア。
bについて:
GROUP BY句についての問題である。GROUP BY句は、そのままの意味であるが、グループ化するという意味であり、グループ化しているのとしていないのをSELECT文に混在させては矛盾が生じるため、決まりとしてGROUP BY句でしていした列はSELECT句でも定義しないといけないというのがあります(ただしグループ関数は除く)。つまり、逆説的に、a の列名をGROUPBY句に並べるのです(ただしグループ関数は除く)。というわけで、正解はエとなる。
【設問2】
優先順位の通り(FROM 句,WHERE 句,GROUP BY 句,HAVING 句,SELECT 句の順に適
用)SQL文を読んでいく。
まず、スクール別受講状況表から講師数が5より少ないスクール名を取り出す。(第一、第四、第五、第六、第八、第九、第十、第十一、第十二が残る)。次に地区ごとにグループ化する。(地区A:第一と第十一 地区B:第四、第五、第六、第十二 地区C:第八 地区D:第九、第十)。最後に、グループ化した地区ごとの講師数を合計し、5人以上講師のいる地区名、講師数、スクール数を抜き出す。
地区A:3+2=5人 地区B:3+3+3+3=12人 地区C:1人 地区D:1+1=2人
よって正解はウの12人となる。
【設問3】
講師 1 人当たりの受講生数が 30 人未満の地区を検索するSQLを考える。つまり、受講者数を講師数で割れば、講師一人当たりの受講者数が分かるので、この結果が30より小さければよい。つまり、SUM(受講生数)/SUM(講師数) < 30  となる。最後に、グループ関数(グループ化した列も)の条件を書く時は、WHERE句では、駄目でHAVINGを使うという決まりなので、正解はイとなる。

Kei様 ご投稿

メニューへ戻る

pafuイーランスクール

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