総視聴再生時間43万分以上(2017年5月13日現在)の動画で基本情報技術者試験の過去問&キーワード解説!スキマ時間に動画!〜これじょIT〜

PR広告

平成28年度春 基本情報技術者試験午後 過去問3 データベース 設問1 合格率アップ!動画付き解説

TOP :

問3 データベース

遊園地の入園者情報を管理する関係データベースに関する次の記述を読んで、設問1~4に答えよ。

 遊園地Yでは、各アトラクションの入り口にICカードの読取り機を設置して、入園者の利用状況を収集するシステムを導入した。入園者は、全てのアトラクションを追加料金なしで利用できるパスポートか、アトラクション利用の都度、料金が課金される入園券のいずれかを購入し、対応するICカードを受け取る。ICカードは退園時に料金を精算してから返却する。ここで、入園者は退園まで遊園地を出ることはないものとする。

 遊園地Yでは、システム導入前は入園者の情報を図1に示す表で構成されるデータベースで管理していた。下線付きの項目は主キーを表す。

平成28年度春応用情報技術者試験午問3 データベース 合格率アップ!動画解説!

設問1

システムの導入に当たり、データベースの表を図2に示すとおり再設計した。次の記述中の に入れる適切な答えを、解答群の中から選べ。

 入園者表に退園時刻の項目を追加することによって、aが分かるようになった。また、利用表を追加することによって、bが分かるようになった。各アトラクションには一意のアトラクション番号を割り振って、利用表から分離したアトラクション表を作成した

平成28年度春応用情報技術者試験午問3 データベース 合格率アップ!動画解説!

平成28年度春応用情報技術者試験午問3 データベース 合格率アップ!動画解説!

a、b に関する解答群

  1. アトラクションの待ち時間
  2. 休園日
  3. 入園者数
  4. 入園者のアトラクション利用状況
  5. 入園者の滞在時間

解説

答えは下記の通りです。

 入園者表に退園時刻の項目を追加することによって、入園者の滞在時間が分かるようになった。また、利用表を追加することによって、入園者のアトラクション利用状況が分かるようになった。各アトラクションには一意のアトラクション番号を割り振って、利用表から分離したアトラクション表を作成した

入園者表に退園時刻に追加すると、入園時刻と退園時刻を比較することで「入園者の滞在時間」が分かります!

aの答えは「オ 入園者の滞在時間」です!

利用表のデータ項目は「入園者番号」「利用時刻」「アトラクション番号」です。この3つの情報から「入園者のアトラクション利用状況」が分かります!

bの答えは「エ 入園者のアトラクション利用状況」です!

設問2

アトラクションごとの延べ利用者数を表示する。次のSQL文の に入れる正しい答えを、解答群の中から選べ。

SELECT 利用表.アトラクション番号, アトラクション表.アトラクション名,
       c
       FROM 利用表, アトラクション表
       WHERE 利用表.アトラクション番号 = アトラクション表.アトラクション番号
       GROUP BY 利用表.アトラクション番号, アトラクション表.アトラクション名

c に関する解答群

  1. AVG(利用表.アトラクション番号)
  2. COUNT(*)
  3. MAX(利用表.アトラクション番号)
  4. SUM(利用表.アトラクション番号)

解説

設問に「アトラクションごとの延べ利用者数を表示」とあります。SQLのFROMとWHEREをみると利用者の数が抽出されることがわかります。また、GROUP BYから「アトラクションごと」していることが分かります。

利用者数(=レコード数)を集計する関数はCOUNTです。

cに入るのは「COUNT(*)」です!

設問3

入園券でアトラクションを利用した入園者のうち、退園時の精算において2,000円以上を支払った入園者について、精算額が多い入園者から降順に、入園者番号と精算額を表示する。入園券の購入者は入園者表の券種に"01"が設定されている。次のSQL文の に入れる正しい答えを、解答群の中から選べ。

SELECT 入園者表.入園者番号, SUM(アトラクション表.料金) AS 支払金額
FROM 入園者表, 利用表, アトラクション表
WHERE 入園者表.入園者番号 = 利用表.入園者番号
AND   利用表.アトラクション番号 = アトラクション表.アトラクション番号
AND   d
ORDER BY 支払金額 DESC

d に関する解答群

ア:

入園者表.券種 = '01'
AND アトラクション表.料金 > 2000
GROUP BY 利用表.アトラクション番号

イ:

入園者表.券種 = '01'
GROUP BY 入園者表.入園者番号
HAVING MAX(アトラクション表.料金) >= 2000

ウ:

入園者表.券種 = '01'
GROUP BY 入園者表.入園者番号
HAVING SUM(アトラクション表.料金) >= 2000

エ:

入園者表.券種 = '01'
GROUP BY 利用表.アトラクション番号
HAVING SUM(アトラクション表.料金) >= 2000

解説

条件を整理します。

表示するデータは「入園者番号」と「精算額」です。

条件は「2,000円以上支払った」ことです。また、入園権の購入者は入園者表の券種が"01"です。

「精算額が多い入園者から降順に」という部分は"ORDER BY 支払金額 DESC"で表現されています。

入園権の購入者は入園者表の券種が"01"は選択肢をみるとすべてに"入園者表.券種 = '01'"があることから、満たされています。

表示するデータは「入園者番号」と「精算額」です。精算額は選択肢をみると"SUM(アトラクション表.料金) AS 支払金額"で表現できます。SUMは合計する関数です。

「入園者番号」ごとに精算するので、"GROUP BY 入園者表.入園者番号"と記載する必要があり、「イ」「ウ」には記載があります。

最後に「2,000円以上支払った」ですが、合計値の条件は"HAVING"を使います。合計値なので関数はSUMを使い"HAVING SUM(アトラクション表.料金) >= 2000"と書きます。

これらをすべて満たすのは「ウ」です!

設問4

パスポートを購入する際に提示することで料金が割引になる会員証を発行することになった。そこで、図3に示すとおり、会員情報を格納する会員表を作成し、入園者表に会員番号を格納する項目を追加する。次のSQL文で抽出できるようになる会員についての正しい答えを、解答群の中から選べ。ここで、1回も入園していない会員はいないものとする。また、会員登録をしていない入園者の場合、入園者表の会員番号にはNULLを設定する。

平成28年度春応用情報技術者試験午問3 データベース 合格率アップ!動画解説!

SELECT 会員表.会員番号, 会員表.氏名
   FROM 会員表, 入園者表
   WHERE 会員表.会員番号 = 入園者表.会員番号
      GROUP BY 会員表.会員番号, 会員表.氏名
      HAVING MAX(入園者表.入園日) < '20160101'

解答群

  1. 2015年以前に1回も入園していない会員
  2. 2016年以降に1回以上、入園した会員
  3. 2016年以降に1回だけ、入園した会員
  4. 2016年以降に1回も入園していない会員

解説

上記SQLを読み解きます。

会員表と入園者表から解答群のいずれかの条件を満たす「会員番号」「氏名」を取得するSQLです。

条件はHAVINGをみましょう!

"HAVING MAX(入園者表.入園日) < '20160101'"は入園者表.入園日から最大値(MAX関数)を算出し、"20160101"以下としています。

入園者表.入園日の最大値とは「会員が最後に入園した日」です。

このことから、このSQLが抽出できるのが「エ 2016年以降に1回も入園していない会員」です!

TOP :

タグ: ,

PR広告

フェイスブックコメント

平成28年度秋 基本情報技術者試験 午後 テキスト・動画解説

平成28年度秋 基本情報技術者試験 午前 テキスト・動画解説

平成28年度春 基本情報技術者試験 午後 テキスト・動画解説

平成28年度春 基本情報技術者試験 午前 テキスト・動画解説

平成27年度秋 基本情報技術者試験 午後 テキスト・動画解説

平成27年度春 基本情報技術者試験 午後 テキスト・動画解説

平成27年度春 基本情報技術者試験 午前 テキスト・動画解説

平成26年度秋 基本情報技術者試験 午前 テキスト・動画解説

平成26年度春 基本情報技術者試験 午前 テキスト・動画解説