IPA過去問ドリル

平成26年度 春期 応用情報技術者試験 午前 問28

テクノロジ/データベース

“東京在庫”表と“大阪在庫”表に対して,SQL文を実行して得られる結果はどれか。ここで,実線の下線は主キーを表す。 東京在庫 商品コード(主キー):在庫数 A001:50 B002:25 C003:35 大阪在庫 商品コード(主キー):在庫数 B002:15 C003:35 D004:80 〔SQL文〕 SELECT 商品コード, 在庫数 FROM 東京在庫 UNION ALL SELECT 商品コード, 在庫数 FROM 大阪在庫 (注:本サイトでは原問題の表を文字表記に変換しています)

出典:平成26年度 春期 応用情報技術者試験 午前 問28

正解:エ

解説

UNION ALLは,複数のSELECT結果を重複行も含めてそのまま連結する集合演算である。東京在庫の3行(A001,B002,C003)と大阪在庫の3行(B002,C003,D004)を単純に連結すると,商品コードC003・在庫数35の行が両方の表に存在するため,重複を除去せずに2回とも出力される,合計6行の結果になる。

選択肢ごとの解説

  • 誤り。この結果は東京在庫のC003の行が抜け落ちており,UNION ALLで両方の表の全行がそのまま出力される点と矛盾する。
  • 誤り。この結果は同じ商品コードの在庫数を合算しており,UNION ALLではなく集計処理を行った場合の結果である。
  • 誤り。この結果はC003の行が1行しかなく,東京在庫と大阪在庫それぞれにあるC003の行が重複除去されずに2行出力されるUNION ALLの動作と矛盾する。
  • 正しい。UNION ALLは重複行を除去せずに全ての行をそのまま連結するため,両方の表に存在するC003(35)の行も2行とも出力され,合計6行になる。
応用情報技術者の過去問を演習モードで解く