DBデータベーススペシャリスト試験 午前Ⅱ

平成27年度春期 データベーススペシャリスト 午前Ⅱ 問2

問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。

問題

図のデータモデルは会計取引の仕訳を表現している。“移動”がリンクする“勘定”の残高を増やす場合は金額の符号を正に,減らす場合は負にすることで,貸借平均の原理を表現する。このモデルに基づき,“勘定”表,“会計取引”表,“移動”表を定義した。勘定科目“現金”の2015年4月30日における残高を導出するためのSQL文はどれか。ここで,モデルの表記にはUMLを用い,表中の実線の下線は主キーを表す。また,“会計取引”表には今期分のデータだけが保持される。 勘定(勘定科目,期首残高) 会計取引(取引番号,取引日) 移動(勘定科目,取引番号,金額)
勘定と会計取引の多対多関連,関連クラス移動,及び一つの会計取引につながる移動金額の和がゼロであるという制約を示すUMLモデル。
勘定と会計取引の多対多関連,関連クラス移動,及び一つの会計取引につながる移動金額の和がゼロであるという制約を示すUMLモデル。

選択肢

  1. ア
    SELECT SUM(金額) AS 残高 FROM 勘定,移動,会計取引 WHERE 勘定.勘定科目 = 移動.勘定科目 AND 会計取引.取引番号 = 移動.取引番号 AND 勘定.勘定科目 = '現金' AND 取引日 <= '2015-04-30'
  2. イ
    SELECT 期首残高 + SUM(金額) AS 残高 FROM 勘定,移動,会計取引 WHERE 勘定.勘定科目 = 移動.勘定科目 AND 会計取引.取引番号 = 移動.取引番号 AND 勘定.勘定科目 = '現金' AND 取引日 <= '2015-04-30' GROUP BY 勘定.勘定科目,期首残高
  3. ウ
    SELECT 残高 FROM 勘定,移動,会計取引 WHERE 勘定.勘定科目 = '現金' AND 取引日 <= '2015-04-30'
  4. エ
    SELECT 残高 FROM 勘定,移動,会計取引 WHERE 勘定.勘定科目 = 移動.勘定科目 AND 勘定.勘定科目 = '現金' AND 取引日 <= '2015-04-30'
解き方のヒントを見る

抽出条件を読み解くための視点

抽出条件を読むときは、まず条件がどの列や値の関係を見ているかを整理し、行ごとに条件の成立状況を追います。結果の並びや表示項目とは分けて考えると、対応関係を落ち着いて確認できます。

この問題で問われていること

今回の確認点は、抽出条件を一つのまとまりとして読まず、比較・組合せ・例外的な値の扱いなど、条件を構成する要素がどのようにつながっているかを整理することです。

視点

条件式を読む順序を決め、対象列、比較の観点、条件同士の結び付き、判定対象となる行の範囲をメモします。出力結果を先に決めつけず、各行について同じ観点で照合するのが基本です。

確認ポイント

  • 条件に登場する列と値の対応を整理できているか
  • 条件同士の結び付きと評価する単位を区別できているか
  • 結果の表示内容と、抽出対象になるかの判定を混同していないか
正解と解説を見る

正解

イ

解説

現金の指定日時点の残高は、勘定表にある現金の期首残高へ、4月30日までの会計取引に対応する移動金額の合計を加えて求めます。そのため、勘定・移動・会計取引をキーで結合し、勘定科目と取引日を条件で限定したうえで、勘定科目と期首残高ごとに集計するSQLが必要です。

理由

現金の残高は、現金勘定の期首残高に、指定日までの現金に関する移動金額を合計して求めます。移動金額は正負の符号で増減を表すため、そのまま合計できます。また、移動を正しい会計取引に対応付けるには、勘定科目と取引番号による結合が必要です。

比較

期首残高を加えないSQLは期中の増減だけになり、結合条件を欠くSQLは無関係な行まで組み合わせます。さらに、集約関数と期首残高を同時に扱うため、勘定科目と期首残高を単位としたGROUP BYが必要です。

選択肢ア

これは不正解だよ。勘定科目と取引番号による結合、現金および指定日までの条件は指定されていますが、SELECT句で期首残高を加えていません。そのため、求められるのは期中の移動金額の合計だけで、期首時点からの残高にはなりません。

選択肢イ(正解)

これは正解だよ。勘定科目と取引番号で三つの表を正しく結合し、現金に限定して4月30日までの移動を集計しています。さらに、現金勘定の期首残高へ金額の合計を加え、勘定科目と期首残高でグループ化して残高を求めています。

選択肢ウ

これは不正解だよ。現金と取引日の条件はありますが、勘定・移動・会計取引を結び付ける条件がありません。そのため、表の無関係な行同士まで組み合わされます。また、提示された表定義には残高列がなく、期首残高と移動金額の集計も行っていません。

選択肢エ

これは不正解だよ。勘定科目で勘定と移動を結合していますが、移動と会計取引を取引番号で結合していません。その結果、指定日条件を満たす会計取引が移動と正しく対応せず、誤った組合せが生じます。さらに、残高列の参照も表定義と一致しません。

学習のポイント

期首残高、移動金額、表同士の結合条件、集計単位を確認する問題です。

出典:独立行政法人 情報処理推進機構(IPA)平成27年度春期 データベーススペシャリスト試験 午前Ⅱ 問2(公式資料:問題冊子(PDF) / 解答例)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針