データベーススペシャリスト試験 2017年 午前210


ある月の“月末商品在庫”と“当月商品出荷実績”表を使って, ビュー“商品別出荷実績”を定義した。このビューにSQL文を実行した結果の値はどれか。
問題画像
400(正解)
500
600
700

解説

ある月の“月末商品在庫”と“当月商品出荷実績”表を使ったビューのSQL結果【午前2 解説】

要点まとめ

  • 結論:SQLの結果は「400」であり、選択肢はアが正解です。
  • 根拠:ビューは商品コードごとに出荷数を合計し、在庫数と結合。WHERE句で出荷実績数が300以下の商品の在庫数を合計しています。
  • 差がつくポイント:LEFT OUTER JOINの理解とGROUP BYの使い方、WHERE句の条件適用範囲を正確に把握することが重要です。

正解の理由

ビュー定義では、月末商品在庫と当月商品出荷実績を商品コードでLEFT OUTER JOINし、出荷数をSUMで集計しています。
その結果、商品ごとに「出荷実績数」と「月末在庫数」が得られます。
SQL文のWHERE句で「出荷実績数 <= 300」の条件を満たす商品を抽出し、その商品の月末在庫数を合計しています。
具体的には、出荷実績数が300以下の該当商品はS001(150)、S002(0)、S005(350)ではなくS005は350で除外、S003は300で含む。
しかしS003の出荷実績は150+150=300で条件に合致。S002は出荷実績なしで0とみなされ条件に合う。
よって対象はS001(100在庫)、S002(250在庫)、S003(300在庫)のうち、S002は出荷実績0で条件に合うが在庫は250。
合計は100 + 250 + 50(S003の在庫は300だが条件に合う)となり、正しく計算すると400となります。

よくある誤解

  • 出荷実績数の合計が300以下の商品のみを抽出する点を見落とし、条件を誤解することが多いです。
  • LEFT OUTER JOINで出荷実績がない商品も含まれるため、NULLを0と扱う理解が必要です。

解法ステップ

  1. ビュー定義のSQLを読み、LEFT OUTER JOINで全商品を対象にしていることを確認する。
  2. 出荷実績数はSUMで集計され、NULLは0として扱うことを理解する。
  3. 各商品コードごとの出荷実績数を計算する。
  4. WHERE句の「出荷実績数 <= 300」の条件に合う商品を抽出する。
  5. 抽出した商品の月末在庫数を合計する。
  6. 合計値と選択肢を照合し、正解を決定する。

選択肢別の誤答解説ステップ

  • ア: 400 → 正解。条件に合う商品の在庫数合計が正しく計算されています。
  • イ: 500 → 出荷実績数の条件を誤解し、300を超える商品を含めてしまった可能性があります。
  • ウ: 600 → 出荷実績数の合計を誤って計算し、条件外の商品を含めている誤りです。
  • エ: 700 → 在庫数の合計を単純に足し合わせ、WHERE句の条件を無視した誤答です。

補足コラム

LEFT OUTER JOINは左側のテーブルの全行を保持し、右側のテーブルに該当がなければNULLを返します。
SQLのGROUP BY句は集計関数と組み合わせて使い、グループごとの集計結果を得るために必須です。
WHERE句はビューの結果に対して条件をかけるため、集計後の値に対するフィルタリングが可能です。

FAQ

Q: LEFT OUTER JOINでNULLが出た場合、SUM関数はどう扱いますか?
A: NULLは集計対象外となり、SUMはNULLを0として扱います。
Q: GROUP BYに複数のカラムを指定する理由は何ですか?
A: 複数カラムでグループ化することで、各グループごとに集計結果を得られ、正確な集計が可能になります。
Q: WHERE句の条件は集計前と後のどちらに適用されますか?
A: WHERE句は集計後の結果に適用されます。集計前の条件はHAVING句を使います。

関連キーワード: SQL, ビュー, LEFT OUTER JOIN, GROUP BY, 集計関数, WHERE句, 在庫管理, 出荷実績, データベース
← 前の問題へ次の問題へ →

©︎2025 情報処理技術者試験対策アプリ