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

選択肢
- ア400
- イ500
- ウ600
- エ700
解き方のヒントを見る
SQL抽出条件を読むための一視点
SQLの抽出条件と結果を対応づけるときは、各条件がどの行や値に影響するかを分けて捉え、条件同士の関係と適用される対象を順に整理することが重要です。という視点を意識します。
この問題で問われていること
確認する観点を「条件が評価される対象とタイミング」に絞り、列の値、行の単位、条件の組み合わせが結果へどう関係するかを、選択肢ごとに丁寧に照合します。という手順で確認します。
視点
抽出条件を読む際は、まず参照される列と行の単位を区別し、条件ごとの役割を整理します。そのうえで、複数条件が同時に現れる場合は、条件間の結び付きと評価対象が一貫しているかを確認し、結果の並びや表示内容とは切り分けて考えます。
確認ポイント
- 条件が参照する列と、評価の対象となる行の単位が一致しているか確認する。
- 複数の条件がある場合、それぞれの関係を混同せず、同じ対象に対する判定かを確認する。
- 抽出される行の条件と、表示される列や並び順を別の論点として切り分ける。
正解と解説を見る
正解
ア
解説
LEFT OUTER JOINとGROUP BYにより、商品ごとの出荷数合計と月末在庫数を持つビューが作られる。出荷実績数が300以下の商品の在庫数だけを合計すると、S001の100個とS003の300個が対象となり、合計は400個になる。
理由
商品別の出荷実績数は、S001が50+100=150個、S003が150+150=300個、S005が100+250=350個となる。S002とS004は出荷明細がないため、SUMの結果はNULLです。WHERE 出荷実績数 <= 300では、150個と300個の商品が対象になる。
比較
対象商品の月末在庫数は、S001が100個、S003が300個です。したがって、出荷商品在庫合計は100個+300個=400個となる。S005は出荷実績数が350個で条件を超え、S002とS004は出荷実績数がNULLなので条件を満たさない。
選択肢ア(正解)
これは正解だよ。商品別に出荷数を集計すると、S001は150個、S003は300個で条件を満たす。これらの月末在庫数はそれぞれ100個と300個なので、式は100個+300個=400個となる。S005は350個で除外され、出荷実績がないS002とS004も対象外になる。
選択肢イ
これは不正解だよ。条件を満たす商品から得られる在庫数は100個と300個で、合計は400個である。500個は、出荷実績数が300個以下という条件に対応する在庫数の組合せになっていない。出荷数と在庫数を混同したり、対象外の商品を加えたりすると公式条件と一致しない。
選択肢ウ
これは不正解だよ。600個になるには、正しい対象である100個と300個に加えて200個を加える必要があるが、在庫200個のS005は出荷実績が350個で、300個以下の条件を満たさない。したがってS005を含める点が条件と異なり、正しい合計は400個である。
選択肢エ
これは不正解だよ。条件を満たす行の在庫数は100個と300個だけであり、700個にはならない。出荷実績がない商品を含めても、NULLは300以下とは判定されない。また、S005の出荷実績は350個で条件外なので、在庫200個を加えることもできず、700個は公式の抽出条件と一致しない。
学習のポイント
GROUP BY後の集約値にWHERE条件を適用する処理順序と、NULLの比較結果を理解する。
出典:独立行政法人 情報処理推進機構(IPA)平成29年度春期 データベーススペシャリスト試験 午前Ⅱ 問10(公式資料:問題冊子(PDF) / 解答例)
関連する過去問一覧
IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針