システムアーキテクト 2021年 午前2 問24
問題文
ある月の“月末商品在庫”表と“当月商品出荷実績”表を使って、ビュー“商品別出荷実績”を定義した。このビューにSQL文を実行した結果の値はどれか。
〔ビュー“商品別出荷実績”の定義〕
CREATE VIEW 商品別出荷実績(商品コード、出荷実績数、月末在庫数)
AS SELECT 月末商品在庫.商品コード、SUM(出荷数)、在庫数
FROM 月末商品在庫 LEFT OUTER JOIN 当月商品出荷実績
ON 月末商品在庫.商品コード = 当月商品出荷実績.商品コード
GROUP BY 月末商品在庫.商品コード、在庫数
〔SQL文〕
SELECT SUM(月末在庫数)AS 出荷商品在庫合計
FROM 商品別出荷実績WHERE出荷実績数 <= 300

選択肢
ア:400(正解)
イ:500
ウ:600
エ:700
ビュー“商品別出荷実績”のSQL結果の値はどれか【午前2 解説】
要点まとめ
- 結論:ビューのSQL実行結果は「400」である。
- 根拠:LEFT OUTER JOINで月末商品在庫の全商品を対象にし、出荷実績数が300以下の商品の月末在庫数を合計しているため。
- 差がつくポイント:GROUP BYのキーとJOINの種類、WHERE句の条件が結果に与える影響を正確に理解することが重要。
正解の理由
ビュー定義では、月末商品在庫表を基準にLEFT OUTER JOINで当月商品出荷実績表を結合し、商品コードごとに出荷数を合計しています。
このため、出荷実績がNULL(出荷なし)の商品も含まれます。
SQL文のWHERE句で「出荷実績数 <= 300」とあるため、出荷数が300以下(NULLは0とみなす)の商品の月末在庫数を合計します。
これにより、条件を満たす商品の月末在庫数合計は「400」となり、選択肢アが正解です。
このため、出荷実績がNULL(出荷なし)の商品も含まれます。
SQL文のWHERE句で「出荷実績数 <= 300」とあるため、出荷数が300以下(NULLは0とみなす)の商品の月末在庫数を合計します。
これにより、条件を満たす商品の月末在庫数合計は「400」となり、選択肢アが正解です。
よくある誤解
- INNER JOINと勘違いし、出荷実績がない商品を除外してしまう。
- WHERE句の条件をJOIN句に誤って適用し、結果が変わることを見落とす。
解法ステップ
- ビュー定義のJOIN種類を確認し、LEFT OUTER JOINであることを理解する。
- GROUP BYのキーが「商品コード」と「在庫数」であることを把握する。
- 出荷実績数はSUM関数で集計され、NULLは0として扱われることを認識する。
- SQL文のWHERE句「出荷実績数 <= 300」の意味を正しく解釈する。
- 条件を満たす商品の月末在庫数を合計し、選択肢と照合する。
選択肢別の誤答解説
- イ(500):出荷実績数の条件を誤解し、300より大きい商品を含めてしまった可能性。
- ウ(600):JOINの種類をINNER JOINと誤認し、出荷実績なしの商品を除外した結果。
- エ(700):WHERE句の条件を無視し、全商品の月末在庫数を合計した誤り。
- ア(400):正しくLEFT OUTER JOINと条件を適用し、正確に集計した結果。
補足コラム
LEFT OUTER JOINは左側のテーブルの全行を保持し、右側のテーブルに対応する行がなければNULLを返します。
SQLのGROUP BY句は集計の単位を決めるため、キーの選択が結果に大きく影響します。
また、WHERE句はビューの結果に対するフィルタリングであり、JOIN句のON条件とは異なるため注意が必要です。
SQLのGROUP BY句は集計の単位を決めるため、キーの選択が結果に大きく影響します。
また、WHERE句はビューの結果に対するフィルタリングであり、JOIN句のON条件とは異なるため注意が必要です。
FAQ
Q: LEFT OUTER JOINでNULL値はどう扱われますか?
A: NULLは集計関数SUMでは0として扱われるため、出荷実績がない商品も集計に含まれます。
A: NULLは集計関数SUMでは0として扱われるため、出荷実績がない商品も集計に含まれます。
Q: WHERE句の条件はJOINの前後どちらに適用されますか?
A: WHERE句はJOIN後の結果に適用されるため、JOINの種類によって結果が変わることがあります。
A: WHERE句はJOIN後の結果に適用されるため、JOINの種類によって結果が変わることがあります。
関連キーワード: LEFT OUTER JOIN, GROUP BY, SQL集計、ビュー定義、WHERE句条件

\ せっかくなら /
システムアーキテクトを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

