平成26年度 春期 午前 問28
データベース
SQL文を実行して得られる結果
“東京在庫”表と“大阪在庫”表に対して,SQL 文を実行して得られる結果はどれか。ここで,実線の下線は主キーを表す。〔表:東京在庫(商品コード,在庫数)= A001/50,B002/25,C003/35。大阪在庫(商品コード,在庫数)= B002/15,C003/35,D004/80。商品コードが主キー。〕〔SQL 文:SELECT 商品コード,在庫数 FROM 東京在庫 UNION ALL SELECT 商品コード,在庫数 FROM 大阪在庫〕
- ア4行の表。A001/50,B002/25,B002/15,D004/80
- イ4行の表。A001/50,B002/40,C003/70,D004/80
- ウ5行の表。A001/50,B002/25,B002/15,C003/35,D004/80
- エ6行の表。A001/50,B002/25,B002/15,C003/35,C003/35,D004/80
答えと解説を見る
✓ これが正解エ6行の表。A001/50,B002/25,B002/15,C003/35,C003/35,D004/80
解説
重複を消さないので、六行がそのまま縦に並びます。
設問は、二つの在庫表を UNION ALL でつないだときの結果を選ばせています。SQL の集合演算を問う設問は、まず行数を数えて候補を削り、それから中身を突き合わせるのが早道です。UNION は二つの結果をつないだあとで重複した行を取り除きますが、ALL を付けるとその取り除きを行いません。つまり両方の行がそのまま縦に並ぶだけになります。東京の表が三行、大阪の表が三行ですから、結果は六行です。この時点で候補は一つに絞られます。中身も確かめておきましょう。商品コードが同じ行は、在庫数が違っていても同じであっても、二行のまま残ります。値が足し合わされることもありません。この演算は行を並べる働きしか持たず、計算をする働きは持たないからです。
ほかの選択肢はなぜ違うのか
- ウ5行の表。A001/50,B002/25…:五行になるのは ALL を付けずに実行したときの結果です。全ての列の値が一致する行が一組あるため、重複を取り除く指定であればその一組が一行に畳まれます。
- イ4行の表。A001/50,B002/40…:商品コードごとにまとめて在庫数を足し上げた形です。そうした集計をさせるにはまとめる列の指定と合計を求める関数が必要なので、この文では起こりません。
- ア4行の表。A001/50,B002/25…:商品コードの一つが結果から丸ごと消えています。両方の表に現れる行を取り除くような演算は指定されていないため、どう読んでもこの並びは出てきません。
この問題の用語
- 関係データベースデータを表の形で持ち、表どうしを結びつけて扱う、最も広く使われているデータベース。データの定義や操作にはSQLを使います。
出典:平成26年度 春期 応用情報技術者試験 午前 問28
同じ用語が出る問題
- 令和7年度 秋期 午前 問28:ビューに関する記述(関係データベース)
- 令和7年度 春期 午前 問25:多重度に関する問題(関係データベース)
- 令和5年度 春期 午前 問30:参照制約に関する問題(関係データベース)
- 令和5年度 春期 午前 問26(関係データベース)
- 令和3年度 春期 午前 問28:NoSQLに関する問題(関係データベース)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)