DBデータベーススペシャリスト試験 午前Ⅱ
平成29年度春期 データベーススペシャリスト 午前Ⅱ 問2
問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。
問題

選択肢
- アSELECT SUM(金額) AS 残高 FROM 勘定,移動,会計取引 WHERE 勘定.勘定科目 = 移動.勘定科目 AND 会計取引.取引番号 = 移動.取引番号 AND 勘定.勘定科目 = '現金' AND 取引日 <= '2017-04-30'
- イSELECT 期首残高 + SUM(金額) AS 残高 FROM 勘定,移動,会計取引 WHERE 勘定.勘定科目 = 移動.勘定科目 AND 会計取引.取引番号 = 移動.取引番号 AND 勘定.勘定科目 = '現金' AND 取引日 <= '2017-04-30' GROUP BY 勘定.勘定科目,期首残高
- ウSELECT 残高 FROM 勘定,移動,会計取引 WHERE 勘定.勘定科目 = '現金' AND 取引日 <= '2017-04-30'
- エ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による補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針