応用情報技術者 2020年 秋期 午前2 問29
問題文
“東京在庫”表と“大阪在庫”表に対して、SQL文を実行して得られる結果はどれか。ここで、実線の下線は主キーを表す。


選択肢
ア:
イ:
ウ:
エ:(正解)
東京在庫表と大阪在庫表のUNION ALL結果【午前2 解説】
要点まとめ
- 結論:
UNION ALL
は両テーブルの全行を重複を排除せずに結合し、全データをそのまま表示します。 - 根拠:
UNION ALL
は重複行も含めて単純に結合するため、同じ商品コードが複数回現れることがあります。 - 差がつくポイント:
UNION
との違いを理解し、重複行の扱いを正確に把握することが重要です。
正解の理由
選択肢エは、東京在庫と大阪在庫の全行を重複を排除せずにそのまま結合した結果を正確に示しています。
具体的には、東京在庫の「B002 25」と大阪在庫の「B002 15」、東京の「C003 35」と大阪の「C003 35」がそれぞれ重複して表示されているため、
具体的には、東京在庫の「B002 25」と大阪在庫の「B002 15」、東京の「C003 35」と大阪の「C003 35」がそれぞれ重複して表示されているため、
UNION ALLの仕様に合致しています。
よくある誤解
UNIONと
UNION ALLの違いを混同し、重複行が自動的にまとめられると思い込むことが多いです。
また、在庫数を合算する処理と勘違いする受験者もいます。
解法ステップ
- SQL文の
UNION ALL
の意味を確認する。 - 東京在庫表と大阪在庫表の全行を単純に結合することを理解する。
- 重複行がそのまま残るため、両方に存在する商品コードは複数行になることを認識する。
- 選択肢の表と照合し、重複行の有無と行数を確認する。
- 重複を含む6行の選択肢エが正解と判断する。
選択肢別の誤答解説
- ア:B002が2行あるがC003が抜けており、行数が4行で不足しているため誤り。
- イ:在庫数を合算した形(B002が40、C003が70)であり、
UNION ALL
の動作と異なる。 - ウ:C003が1行しかなく、東京と大阪両方のC003が表示されていないため誤り。
- エ:全ての行が重複を含めて正しく表示されているため正解。
補足コラム
UNIONは重複行を排除して結合するため、結果セットの行数が減ることがあります。一方、
UNION ALLはパフォーマンスが良く、重複を気にしない場合に使われます。
在庫数の合算は
GROUP BY句と
SUM()関数を使って実現します。
FAQ
Q:
A:
UNIONと
UNION ALLの違いは何ですか?
A:
UNIONは重複行を排除して結合し、
UNION ALLは重複を排除せず全行を結合します。
Q: 在庫数を合算したい場合はどうすればいいですか?
A:
A:
GROUP BY 商品コードと
SUM(在庫数)を使い、集計クエリを作成します。
関連キーワード: UNION ALL, SQL結合、重複行、在庫管理、集計クエリ

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

