平成31年春期試験午前問題データベースfについて

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
なおさん  
(No.1)
https://www.fe-siken.com/s/kakomon/31_haru/pm03.html

設問3のfについてです。
まず解説で問題文SQLのSELECT欄にはない階級上限欄があるのが疑問なのと、
私の右外部結合の認識が間違ってるのかわからないのですが
身長欄がNULLになるのがよくわかりません。
右外部結合ではFROM 表1 RIGHT OUTET JOIN 表2とあった場合、表2が基準に作られるのならばNULLは存在しないのではないのでしょうか。
いまいち右外部結合についてもよく分かっていないのかもしれません。

解説どうかよろしくお願いします。
2020.12.14 18:34
かなさん 
FE ブロンズマイスター
(No.2)
>解説で問題文SQLのSELECT欄にはない階級上限欄があるのが疑問

解説のほうでは、「設問のSQL文を実行した場合、グループ化及び整列が済んだ時点で上位3階級の状態は次のようになっています」となっていますが、「グループ化及び整列が済んだ時点」では、まだSEELCTされていません。
内部データとしては、「測定結果ビューのすべての列」・「身長階級表のすべての列」が織り込まれたテーブル(「select *」に近いもの)が生成されて、その中からSELECTを使って必要な列を抜き出しているというイメージがよろしいかと思います。解説の表は「必要な列を抜き出」す前の状態を表現したものなので、あのようになっています。

右外部結合についてはわかりやすい説明ができずに申し訳ないのですが、「表2が基準に作られる」からこそ表1にないデータがNullとなるのです。

----
ここからは余談ですが、指定されたSQL文を実行すれば身長階級・階級下限・人数の列からなるテーブルが生成されるはずですが、図3には「階級下限」の列がありませんね。これは若干ながら出題ミスなのではないでしょうか。
2020.12.16 11:31
なおさん  
(No.3)
解説ありがとうございます。
では、もし仮に表1が基準に作られる場合どのような結合になるのでしょうか。いまいちNULLが存在するところが腑に落ちてません。教えていただけると助かります。
2020.12.16 19:34
かなさん 
FE ブロンズマイスター
(No.4)
画像のような感じになります。
i. imgur. com/wcpY3jr.png

今回の設問の場合、測定結果ビュー基準で結合すれば、count(*)でもうまいこと動きそうです。

ただ、もし身長を測りそびれた生徒がいた場合、その生徒の「身長階級」「階級下限」「階級上限」はNullになります。
また、(リミットチェックされるべきでしょうから実際上ないとは思いますが)入力ミスで負数や1000以上の身長を持つ生徒がいた場合も、その生徒の「身長階級」「階級下限」「階級上限」はNullになります。

そして、group by 身長階級, 階級下限, 階級上限してselect 身長階級, count(*)すると、「140cm未満」「140cm以上150cm未満」などの行に交じって「Null」が出てくることになります。
2020.12.17 16:14
なおさん  
(No.5)
画像が見れないのですがどのように見ればいいでしょうか?すみません、よろしくお願いします。
2020.12.21 19:49
かなさん 
FE ブロンズマイスター
(No.6)
リンクが張れないのでスペースを入れました。

imgurの前・comの前のスペースを取り除いてください。
2020.12.22 16:15

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop