見出し画像

狙った分野の午後問題をやっつけたいよPart3・・・小学生を対象とした、ある子供会の名簿を管理する関係データベース『設問1』

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

テーマと、四つの表のつながりが確認できたので、設問1へ。大事そうに見えるところをチェック。

 ・6年生向けイベントの案内を配布したい。
 ・そのために6年生保護者(氏名と住所)を抽出したい。
 ・同一人物を重複して抽出するのはダメ
という部分に注目してみる。

では解答群。ごちゃごちゃしてるように・・・見える。から、調べるポイントを絞り込みたいな。

まずは、それぞれの一行目を見比べてみた。

一行目は、ア~エすべてに保護者表.保護者氏名, 保護者表.住所
があって、DISTINCTがついていないのがエだけ。
DISTINCTは、重複データの表示をしないというキーワード。
これをつけることで、氏名も住所も同じっていうのは表示されなくなる
そういえば、問題文にの中にそんなことが書いてあったな。

ということは、エは候補からはずしていいね。

次は二行目。候補として残っているア~ウを見比べる。

二行目はFROMキーワードで、使いたい表が書いてある。
アは保護者表のみ、イとウは保護者表と児童表
イとウは、二つ以上の表を使っているんだから、次のWHEREでひもづけをしているかをチェックしなきゃいけない。

その流れで・・・
三行目のWHEREを見てみる。
まずは、ひもづけチェックをしたいので、イとウだけに注目。

イのWHEREは、いきなり児童表.学年 = 6
ウは、二つの表を保護者番号でひもづけして、からの児童表.学年 = 6
イもウも二つの表を使っているから、ひもづけはしなきゃいけない。
ということは、イはそれをやっていないからダメ。
で、イも候補から消えた。

ここまでで、

イとエが候補から消えたので、残っているのはアとウ。
その二つをさらに調べる。調べるところは、WHEREからうしろ。


から見ていく。
アのWHEREからうしろは、副問い合わせになっている。
( )内のSELECT文が書かれているのが副問い合わせ。
この場合、まずこの( )内が実行され、その結果がカッコ内にずらずらと並ぶ。

 この①部分は『児童表から、6年生の児童の、保護者番号を取得』するためのSELECT文が書かれているので、6年生の保護者の番号が、ずらずらと並ぶのだ。
こんな感じで。

それから、WHERE全体の処理が行われる。

保護者表.保護者番号 NOT IN ( ・・・)は、( )内のデータと一致しない保護者番号という意味。
( )にずらずら並べたのは、6年生の保護者の番号だった。
つまりアには、6年生の保護者の番号と一致しないものを抽出する、という絞り込み条件が書かれているのだ。
だめじゃん、6年生の保護者を抽出したいのに。
だから、アは候補から消えました。

じゃあもう残りはウしかないね。
のWHEREも見ておこうかな。

まちがいないぞ。

この記事が気に入ったらサポートをしてみませんか?