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

PR広告

平成30年度春 基本情報技術者試験午後 問3 データベース|合格率アップ!動画解説!

小学生を対象とした、ある子供会の名簿を管理する関係データベースに関する次の記述を読んで、設問1~4に答えよ。

 D子供会は、小学校に入学するときに入会を受け付け、小学校を卒業したら退会する。D子供会では、会員名簿を管理するためのデータベースを構築して、会の運営に活用している。

 このたび、児童のイベントへの参加実績を記録するために、活動表とイベント表を追加した。

 データベースの表構成とデータ格納例を図1に示す。下線付きの項目は、主キーを表す。

保護者表

保護者番号 保護者氏名 電話番号 住所
12021 情報花子 03-1111-2222 東京都○○区□□□
... ... ... ...

児童表

児童番号 児童氏名 学年 保護者番号
12027 情報一郎 6 12021
14021 情報二郎 4 12021
... ... ... ...

活動表

児童番号 イベント番号
12027 18001
14021 18001
12027 18002
... ...

イベント表

イベント番号 イベント名 開催日
18001 歓迎会 20180407
18002 地域清掃 20180414
... ... ...

図1 データベースの表構成とデータ格納例

設問1

6年生を対象に実施するイベントの案内を配布するために、6年生の保護者の氏名と住所を抽出する。ここで、同一の保護者は重複して抽出しない。また、同じ住所に氏名が同じ保護者は、複数人いないものとする。正しいSQL文を、解答群の中から選べ。

解答群

SELECT 
    DISTINCT 保護者表.保護者氏名
    ,        保護者表.住所
FROM 保護者表
WHERE 保護者表.保護者番号 NOT IN 
      (SELECT 児童表.保護者番号 FROM 児童表 WHERE 児童表.学年 = 6)

SELECT 
    DISTINCT 保護者表.保護者氏名
    ,        保護者表.住所
FROM 保護者表, 児童表
WHERE 児童表.学年 = 6
GROUP BY 保護者表.保護者氏名, 保護者表.住所

SELECT 
      DISTINCT 保護者表.保護者氏名
    ,        保護者表.住所
FROM 保護者表, 児童表
WHERE 保護者表.保護者番号 = 児童表.保護者番号 AND 児童表.学年 = 6

SELECT 
    DISTINCT 保護者表.保護者氏名
    ,        保護者表.住所
FROM 保護者表, 児童表
WHERE 保護者表.保護者番号 = 児童表.保護者番号
GROUP BY 保護者表.保護者氏名, 保護者表.住所 HAVING 児童表.学年 = 6

設問2

イベント番号が 18001 のイベントに参加した児童のうち、1年生である児童の保護者の保護者番号と氏名を抽出する。ここで、同一の保護者は重複して抽出しない。次のSQL文の に入れる正しい答えを、解答群の中から選べ。

SELECT 
    DISTINCT 保護者表.保護者氏名
a

a に関する解答群

FROM 児童表, 保護者表, イベント表
WHERE 児童表.学年 = 1
AND   イベント表.イベント番号 = 18001

FROM 児童表, 保護者表, イベント表
WHERE 児童表.保護者番号 = 保護者表.保護者番号
AND   児童表.学年 = 1
AND   イベント表.イベント番号 = 18001

FROM 児童表, 活動表, 保護者表
WHERE 児童表.児童番号 = 活動表.児童番号
AND   児童表.保護者番号 = 保護者表.保護者番号
AND   活動表.イベント番号 = 18001
GROUP BY 児童表.児童氏名 HAVING 児童表.学年 = 1

FROM 児童表, 活動表, 保護者表
WHERE 児童表.児童番号 = 活動表.児童番号
AND   児童表.保護者番号 = 保護者表.保護者番号
AND   児童表.学年 = 1
AND   活動表.イベント番号 = 18001

設問3

イベント名と、そのイベントに参加した児童の数を表示する。次のSQL文の に入れる正しい答えを、解答群の中から選べ。ここで、イベント名は全て異なるものとする。

SELECT イベント表.イベント名, b
FROM  活動表, イベント表
WHERE 活動表.イベント番号 = イベント表.イベント番号
GROUP BY イベント表.イベント名

b に関する解答群

  • ア AVG(活動表.イベント番号)
  • イ COUNT(*)
  • ウ MAX(活動表.イベント番号)
  • エ SUM(活動表.イベント番号)

設問4

年度の切替えのために、次に示す手順で表を更新する。(1)、(2)は入会前の準備のために3月31日に実行し、(3)~(7)は6年生が退会した4月1日に実行する。次のSQL文の に入れる正しい答えを、解答群の中から選べ。

〔手順〕

(1) 新入会児童の保護者のうち、未登録の保護者を登録する。

(2) 新入会児童を登録する。このとき、学年の値は0とする。

(3) 活動表のレコードを全て削除する。

(4) 児童表の全ての児童に対して、学年の値に1を加える。

(5) 児童表から、学年の値が7の児童を削除する。

(6) 次のSQL文を実行して、保護者表から、在籍する児童がいなくなった保護者を削除する。

DELETE FROM 保護者表
WHERE c

(7) イベント表のレコードを全て削除してから、新年度の計画に合わせてイベントを登録する。

c に関する解答群

保護者表.保護者番号 = NULL

保護者表.保護者番号 IN
    (SELECT 児童表.保護者番号 FROM 児童表 WHERE 児童表.学年 = 7)

保護者表.保護者番号 IN
    (SELECT 児童表.保護者番号 FROM 児童表)

保護者表.保護者番号 NOT IN
    (SELECT 児童表.保護者番号 FROM 児童表)

設問1 解説

解答 ウ

平成30年度春 基本情報技術者試験午後 過去問3

設問2 解説

解答 a エ

平成30年度春 基本情報技術者試験午後 過去問3

設問3 解説

解答 イ COUNT(*)

イベントに参加した児童を求めます。児童数は活動表1レコードにつき1人なので、活動表のレコード数を数えればよく、COUNT(*)を使います。

SELECT イベント表.イベント名, b COUNT(*)
FROM  活動表, イベント表
WHERE 活動表.イベント番号 = イベント表.イベント番号
GROUP BY イベント表.イベント名

設問4 解説

解答 エ

手順で各テーブルのデータがどのようになるのでしょうか?

(1) 新入会児童の保護者のうち、未登録の保護者を登録する。

→ 保護者表レコードが追加

(2) 新入会児童を登録する。このとき、学年の値は0とする。

→ 児童表レコードが追加(このときまだ学年は変わらない)

(3) 活動表のレコードを全て削除する。

→ そのまま

(4) 児童表の全ての児童に対して、学年の値に1を加える。

→ 新入会児童が児童表の学年が「1」となり、卒業生は児童表の学年が「7」となる

(5) 児童表から、学年の値が7の児童を削除する。

→ 児童表から卒業生が削除される

(6) 次のSQL文を実行して、保護者表から、在籍する児童がいなくなった保護者を削除する。

DELETE FROM 保護者表
WHERE c 保護者表.保護者番号 NOT IN  (SELECT 児童表.保護者番号 FROM 児童表)

→ (5)で卒業生が削除されており「SELECT 児童表.保護者番号 FROM 児童表」で、児童表に児童が存在する保護者番号が抽出される

この問題では児童表に児童が「存在しない」保護者なので「NOT IN」を使う

※(SELECT 児童表.保護者番号 FROM 児童表)を副問い合わせとかサブクエリという

(7) イベント表のレコードを全て削除してから、新年度の計画に合わせてイベントを登録する。

→ そのまま

平成30年度春 基本情報技術者試験午後 過去問

平成30年度春 基本情報技術者試験午前 過去問

PR広告

フェイスブックコメント

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

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

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

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

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

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

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

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

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