平成26年度 春期 応用情報技術者試験 午前 問28
テクノロジ/データベース“東京在庫”表と“大阪在庫”表に対して,SQL文を実行して得られる結果はどれか。ここで,実線の下線は主キーを表す。 東京在庫 商品コード(主キー):在庫数 A001:50 B002:25 C003:35 大阪在庫 商品コード(主キー):在庫数 B002:15 C003:35 D004:80 〔SQL文〕 SELECT 商品コード, 在庫数 FROM 東京在庫 UNION ALL SELECT 商品コード, 在庫数 FROM 大阪在庫 (注:本サイトでは原問題の表を文字表記に変換しています)
出典:平成26年度 春期 応用情報技術者試験 午前 問28
- ア商品コード:在庫数 A001:50 B002:25 B002:15 D004:80
- イ商品コード:在庫数 A001:50 B002:40 C003:70 D004:80
- ウ商品コード:在庫数 A001:50 B002:25 B002:15 C003:35 D004:80
- エ商品コード:在庫数 A001:50 B002:25 B002:15 C003:35 C003:35 D004:80
正解:エ
解説
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行になる。