狙った分野の午後問題をやっつけたいよPart3・・・小学生を対象とした、ある子供会の名簿を管理する関係データベース『設問2』
#基本情報技術者試験 #平成30年 #春期 #午後 #データベース #SQL
設問2は、穴埋め問題のようです。
チェックしながら問題文を読みます。
大事そうなことの中にも、すでにSQL文になっているやつもあるな。
黄色い部分はまだ書かれていないので、空欄の解答群にあるはず。
では解答群。
さっき黄色くマークしたところが、ちゃんと書かれているか?を順番に見ていこうかな。
黄色でマークしたのは・・・
・18001のイベント
・それに参加した児童
・そのうち1年生
の保護者をピックアップしたいんだよ、という意味のところ。
じゃあまず、18001のイベントについて書いてあるところに注目してみる。
全部ちゃんと18001のイベントであるものという文になっているんだけど、ア・イと、ウ・エで違いがあった。
まず、ア・イはイベント表のイベント番号が18001のもの、と書いてある。
一方、ウ・エは活動表のイベント番号が18001のもの、だ。
たしかにどちらの表にもイベント番号がある。
どっちがいいかなあ。
迷ったので、黄色でマークしたところの他の部分もチェック。
・18001のイベント
・それに参加した児童
・そのうち1年生
となると、どの子がどのイベントに参加したか?がわかるほうじゃないといけないな。ってことは、活動表だよね。
そうすると、解答群のア・イは候補から消えた。
では、ウ・エをさらに調べていくことになるね。
ウとエのFROMのところはまったく同じ、WHEREも途中まではまったく同じ。ひもづけをちゃんとしている。
では、WHEREの続きで、ウとエの違いを調べる。
ウのWHEREは、イベント番号が18001のやつ、
エのWHEREは、学年が1かつイベント番号が18001のやつとなっている。
エがいいんじゃないか?と思う。
エで決まり。
けど、ウには続きがあるので、一応見てみようかな。
ウのWHEREの後には、GROUP BYが書かれている。グループを作るやつだ。GROUP BY 児童表.児童氏名だから、児童氏名でグループを作っている。
GROUP BYは、実はSELECTと密接な関係にあるのだ。
GROUP BYに使った項目はSELECTで使えるけど、そうじゃない項目はそのままSELECTで使うことはできない。
工夫を凝らせばできないことはないけど、今回のSELECTのところに工夫はないまま、保護者番号と保護者氏名を使ってる。この使い方だとエラーになってしまうのです。