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

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

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

問題

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

選択肢

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

SQLの抽出条件を読む視点

SQLの抽出結果を考えるときは、条件式をいきなり計算せず、どの行のどの列に判定が関わるかを整理し、条件同士の結び付きと対象範囲を確認します。列の役割を区別して追います。

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

確認する観点を、抽出条件が各行を判定する単位と、複数条件が組み合わされたときの評価のまとまりに絞ります。列の値・行の対象・条件の関係を図式化して捉えてください。

視点

SQLの結果を読む際は、選択対象となる行と、条件判定に使われる列や式を分けて整理します。条件の結合、NULLを含む値、比較対象の型や範囲が、行ごとの判定にどう影響し得るかを確認しましょう。

確認ポイント

  • 各条件が参照する列と、判定の対象となる行を対応付ける
  • 複数条件のまとまりと、条件が評価される順序の前提を確認する
  • NULL・型・境界値など、判定結果を揺らし得る要素を見落とさない
正解と解説を見る

正解

イ

解説

現金の残高は、勘定表に記録された期首残高へ、指定日までの現金に関する移動金額を加減して求める。移動の抽出には勘定科目と取引番号による結合が必要です。

理由

現金の残高は、勘定表の期首残高に、2017年4月30日以前の会計取引に対応する移動表の金額を加えた値です。したがって、勘定科目で勘定と移動を結び、取引番号で移動と会計取引を結んだ上で、金額を集計する。

比較

対象を現金に限定し、取引日を指定日以前に絞る必要がある。また、集計結果には期首残高を加える必要があり、勘定科目と期首残高ごとにグループ化して、勘定表の値と移動金額の対応を保つ。

選択肢ア

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

選択肢イ(正解)

これは正解だよ。勘定科目で勘定と移動を、取引番号で移動と会計取引を結合し、現金かつ2017年4月30日以前の移動に限定している。さらに、期首残高へ金額の合計を加え、勘定科目と期首残高で集計単位を明確にしている。

選択肢ウ

これは不正解だよ。勘定科目を現金に絞る条件と取引日の条件はあるが、勘定・移動・会計取引の間に結合条件がなく、表の組合せが対応しない。また、定義された列にある期首残高や金額の集計も使っていない。

選択肢エ

これは不正解だよ。勘定と移動は勘定科目で結合しているが、移動と会計取引を取引番号で結合していない。そのため、取引日による絞込みが移動へ正しく対応せず、無関係な組合せが生じる。さらに期首残高の加算と金額の集計もない。

学習のポイント

集計値だけでなく、基準残高と期間内の増減を組み合わせるSQLの考え方を学ぶ。

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

関連する過去問一覧

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