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

選択肢
- ア400
- イ500
- ウ600
- エ700
解き方のヒントを見る
SQL抽出条件を読むための着眼点
SQLの抽出条件と結果を対応づけるときは、条件がどの行や値の組合せに適用されるかを整理し、処理の順序、対象範囲、境界となる条件を意識して一つずつ順に読み進めます。
この問題で問われていること
確認する観点を、抽出条件が評価される対象と、その条件が適用される単位の関係に絞ります。列・行・グループなどの単位を混同せず、評価の順序と結果との対応を丁寧に追います。
視点
条件式を個別の記号だけで追わず、どのデータのまとまりを対象に、どの段階で評価される指定なのかを整理します。対象範囲と評価単位を分けて捉えると、結果との対応を検討しやすくなります。
確認ポイント
- 条件が対象とするデータの単位を確認する
- 条件が評価される段階と対象範囲を整理する
- 得られる行や値を条件との対応だけで照合する
正解と解説を見る
正解
ア
解説
商品コードごとに出荷数を合計すると、S001は150個、S003は300個、S005は350個となる。出荷記録のないS002とS004はLEFT OUTER JOINで残るが、集計値がNULLなのでWHERE条件を満たさない。したがって対象はS001とS003であり、在庫数は100個と300個なので、式は100個+300個=400個となる。
理由
ビューでは商品コードごとに出荷数をSUMし、商品コードと在庫数でGROUP BYしている。S001は50個+100個=150個、S003は150個+150個=300個、S005は100個+250個=350個となる。出荷記録のない商品は集計値がNULLになる。
比較
WHERE 出荷実績数 <= 300を適用すると、150個と300個の行だけが残る。対応する月末在庫数はS001が100個、S003が300個なので、出荷商品在庫合計は100個+300個=400個です。S005の350個は条件外で、NULLも比較条件を満たさない。
選択肢ア(正解)
これは正解だよ。商品コード別に集計すると、条件を満たすのはS001の出荷実績150個とS003の300個である。対応する月末在庫数はそれぞれ100個と300個なので、100個+300個=400個となる。S005は350個で条件外、出荷記録のない商品はNULL比較となる。
選択肢イ
これは不正解だよ。出荷実績数が300個以下の行だけを対象にすると、在庫数100個と300個の合計になるため、500個にはならない。500個という値は、公式表の在庫数を条件に従って加算した結果と一致せず、対象行または在庫数の扱いが異なっている。
選択肢ウ
これは不正解だよ。600個にするには、条件外であるS005の月末在庫数200個まで加える必要がある。しかしS005の出荷実績は100個+250個=350個で、出荷実績数 <= 300を満たさない。したがって600個はWHERE条件を無視した値である。
選択肢エ
これは不正解だよ。条件を満たすS001とS003の在庫数は100個と300個だけであり、その合計は400個である。700個は、公式表の条件を満たす対象行の在庫数合計と一致しない。出荷実績350個のS005やNULLの行を誤って加えるなど、対象行の判定が異なっている。
学習のポイント
LEFT OUTER JOIN、GROUP BY、SUM、NULL、WHERE条件の評価順を整理して学習する。
出典:独立行政法人 情報処理推進機構(IPA)平成24年度春期 データベーススペシャリスト試験 午前Ⅱ 問9(公式資料:問題冊子(PDF) / 解答例)
関連する過去問一覧
IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針