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

PR広告

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

従業員の通勤情報を管理する関係データベースに関する次の記述を読んで、設問1~4に答えよ。

 Y社では、従業員の1か月分の交通費の合計を通勤手当として支給している。交通費は、通勤に公共の交通機関を利用している場合は通勤経路の各区間運賃であり、自家用車を利用している場合は燃料費などの諸経費である。

 通勤手当は図1に示す表で管理していたが、より詳細に情報を管理するために、図2のとおり変更した。下線付きの項目は、主キーを表す。

従業員表

従業員番号 氏名 住所 ... 通勤手当
00980125 情報太郎 東京都文京区○○○ ... 10650

図1 変更前の標高生徒データ格納例

従業員表

従業員番号 氏名 住所 ...
00980125 情報太郎 東京都文京区○○○ ...

通勤費表

従業員番号 交通機関コード 交通費
00980125 B02 4800
00980125 S01 5850

交通機関表

交通機関コード 交通機関名
B01 ○○バス
B02 △△バス
C01 自家用車

図2 変更後の表構成とデータ格納例

設問1 変更後の表を用いて通勤手当に関するデータを集計する。次の記述中の に入れる正しい答えを、解答群の中から選べ。

 従業員ごとの通勤手当を求めるには、aグループ化して、集合関数bを用いればよい。また、交通機関ごとの利用者数を求めるには、cグループ化して、集合関数dを用いればよい。

a、c に関する解答群

  • ア:交通機関表を交通機関コードで
  • イ:従業員表を従業員番号で
  • ウ:通勤費表を交通機関コードで
  • エ:通勤費表を従業員番号で

b、d に関する解答群

  • ア:AVG
  • イ:COUNT
  • ウ:MAX
  • エ:SUM

設問1の解説

aの正解は「エ 通勤費表を従業員番号で」です!

設問1を読むと、従業員ごとの通勤手当を求めるには、aグループ化して、とあります。

変更後の表で、通勤費が記載されているのは、通勤費表です。

また、従業員ごとの通勤手当を求めます、通勤費表には、従業員番号があるので、これを使いグループ化します。

上記をまとめると、aの正解は「エ 通勤費表を従業員番号で」です!

bの正解は「エ SUM」です!

従業員ごとの通勤手当なので、通勤手当を合計する必要があります。

選択肢の中で、合計を求める関数はSUMです。

従って、bの正解は「エ SUM」です!

ついでに

AVGは平均

COUNTはレコード数

MAXは最大値

を算出します。

cの正解は「ウ 通勤費表を交通機関コードで」です!

交通機関ごとの利用者数を求めるので、交通機関の利用履歴がわかる通勤費表を対象にします。

交通機関ごとなので、交通機関コードを利用します。

従って、cの正解は「ウ 通勤費表を交通機関コードで」です!

dの正解は「イ COUNT」です!

交通機関ごとの利用者数を求めるので、レコード数が必要です。

レコード数を算出関数はCOUNTです。

従って、dの正解は「イ COUNT」です!

設問2

通勤にバスを利用している従業員の従業員番号と交通機関名を表示する。ここで、交通機関コードは3文字の固定長文字列であり、バスの交通機関コードだけが文字"B"で始まる。次のSQL文の に入れる正しい答えを、解答群の中から選べ。

SELECT 
      通勤費表.従業員番号
    , 交通機関表.交通機関名
FROM 
      通勤費表
    , 交通機関表
WHERE 通勤費表.交通機関コード = 交通機関表.交通機関コード
AND   e

e に関する解答群

  • ア:通勤費表.交通機関コード IN ('B00'、'B99')
  • イ:通勤費表.交通機関コード LIKE 'B%'
  • ウ:通勤費表.交通機関コード LIKE 'B_'
  • エ:通勤費表.交通機関コード LIKE '_B%'

設問2 解説

正解は「イ:通勤費表.交通機関コード LIKE 'B%'」

設問2に「バスの交通機関コードだけが文字"B"で始まる。」とあります。

完全一致させる場合は「=」を使いますが、部分一致させる場合、「=」の代わりに「LIKE」を使います。

「"B"で始まる」場合は、LIKE 'B%'と書きます。%は任意の文字列です。

「"B"が含まれる」場合は、LIKE '%B%'と書きます。%は任意の文字列です。

「"B"で終わる」場合は、LIKE '%B'と書きます。%は任意の文字列です。

今回の場合は、「"B"で始まる」なので、「LIKE 'B%'」と書きます。

対象は、通勤費表の交通機関コードです。

従って、正解は「イ:通勤費表.交通機関コード LIKE 'B%'」です!

設問3

従業員の通勤圏内に新しい路線が開通することになった。この影響を確認するために、通勤経路が変わる可能性がある従業員の従業員番号を抽出することにした。同じ従業員番号は一つだけ表示する。新しい路線が影響する交通機関名は"情報都市線"と"駒込バス"であり、いずれも同名の交通機関名は他にないものとする。次のSQL文の に入れる正しい答えを、解答群の中から選ベ。

SELECT
    通勤費表.従業員番号
FROM
    通勤費表
WHERE
    f

f に関する解答群

ア
通勤費表.交通機関コード = (
    SELECT 
        交通機関表.交通機関コード
    FROM
        交通機関表
    WHERE
        交通機関表.交通機関名 IN ('情報都市線', '駒込バス')
)
イ
通勤費表.交通機関コード IN (
    SELECT 
        交通機関表.交通機関コード
    FROM
        交通機関表
    WHERE
        交通機関表.交通機関名 IN ('情報都市線', '駒込バス')
)
ウ
通勤費表.交通機関コード IN (
    SELECT 
        交通機関表.交通機関コード
    FROM
        交通機関表
    WHERE
        交通機関表.交通機関名 IN ('情報都市線', '駒込バス')
)
GROUP BY 通勤費表.交通機関コード
エ
通勤費表.交通機関コード IN (
    SELECT 
        交通機関表.交通機関コード
    FROM
        交通機関表
    WHERE
        交通機関表.交通機関名 IN ('情報都市線', '駒込バス')
)
GROUP BY 通勤費表.従業員番号

設問3 解説

正解は「エ」です!

このSQLの目的は

「通勤経路が変わる可能性がある従業員の従業員番号を抽出することにした。同じ従業員番号は一つだけ表示する。」です。

新しい路線が影響する交通機関名は"情報都市線"と"駒込バス"です。

これを求めるSQLは選択肢に共通していますが

SELECT 交通機関表.交通機関コード FROM 交通機関表

WHERE 交通機関表.交通機関名 IN ('情報都市線', '駒込バス')

です。

WHERE 交通機関表.交通機関名 IN ('情報都市線', '駒込バス')

WHERE (交通機関表.交通機関名 = '情報都市線' OR 交通機関表.交通機関名 = '駒込バス')

と同じ意味です。

このSQLの複数ある結果が通勤費表.交通機関コードのWHERE句に入ればいいとなります。

結果が複数あるので「=」にはなりません(アは不正解)。

ポイントは「同じ従業員番号は一つだけ表示する。」です。

このままだとイのSQLになりますが、SQLにヒットする従業員は複数存在する可能性がありますので、イも異なります。

正解は「ウ」か「エ」なのですが、「同じ従業員番号は一つだけ表示する。」ので、「GROUP BY 通勤費表.従業員番号」グルーピングが必要です。

従って、正解は「エ」です!

設問4

Y社では、毎年4月に交通安全講習会を開催しており、通勤に自家用車(交通機関コード"C01")を利用している従業員には受講を義務付けている。通勤に自家用車を利用していない従業員の受講は任意である。交通安全講習会を受講した従業員は、図3に示す講習会受講表で管理している。受講していない従業員のレコードは存在しない。

 通勤に自家用車を利用している従業員のうち、2016年4月20日に開催された交通安全講習会を受講していない従業員の従業員番号を表示する。次のSQL文の に入れる正しい答えを、解答群の中から選べ。

講習会受講表

従業員番号 受講日
00980125 20160420

図3 講習会受講表とデータ格納例

SELECT 
    通勤費表.従業員番号
FROM 
    通勤費表
WHERE
    通勤費表.交通機関コード = 'C01'
AND 
    g

g に関する解答群

ア
通勤費表.従業員番号 = (
    SELECT
        講習会受講表.従業員番号
    FROM 
        講習会受講表
    WHERE
        受講日 IS NULL
)
イ
通勤費表.従業員番号 IN (
    SELECT
        講習会受講表.従業員番号
    FROM 
        講習会受講表
    WHERE
        受講日 = '20160420'
)
ウ
通勤費表.従業員番号 IN (
    SELECT
        講習会受講表.従業員番号
    FROM 
        講習会受講表
    WHERE
        受講日 IS NULL
)
エ
通勤費表.従業員番号 NOT IN (
    SELECT
        講習会受講表.従業員番号
    FROM 
        講習会受講表
    WHERE
        受講日 = '20160420'
)

解説 設問4

正解は「エ」です!

設問4に「通勤に自家用車を利用している従業員のうち、2016年4月20日に開催された交通安全講習会を受講していない従業員の従業員番号を表示する。」とあります。

講習会受講表で、受講日が'20160420'となっている従業員「以外」が対象となります。

講習会受講表で、受講日が'20160420'となっている従業員を求めるSQLは

SELECT 講習会受講表.従業員番号 FROM 講習会受講表 WHERE 受講日 = '20160420'

です。

この従業員番号「以外」で、通勤費表.従業員番号を検索結果とすれば良いので、NOT INを使います。

従って、

エ
通勤費表.従業員番号 NOT IN (
    SELECT
        講習会受講表.従業員番号
    FROM 
        講習会受講表
    WHERE
        受講日 = '20160420'
)

となります!

PR広告

フェイスブックコメント

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

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

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

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

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

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

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

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

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