令和3年度 秋期 午前 問29
データベース
期ごとの売上を得るSQL文
“部門別売上”表から,部門コードごと,期ごとの売上を得る SQL 文はどれか。
〔表〕部門別売上
部門コード 第 1 期売上 第 2 期売上 D01 1,000 4,000 D02 2,000 5,000 D03 3,000 8,000
〔問合せ結果〕
部門コード 期 売上 D01 第 1 期 1,000 D01 第 2 期 4,000 D02 第 1 期 2,000 D02 第 2 期 5,000 D03 第 1 期 3,000 D03 第 2 期 8,000
- アSELECT 部門コード, '第 1 期' AS 期, 第 1 期売上 AS 売上 FROM 部門別売上 INTERSECT (SELECT 部門コード, '第 2 期' AS 期, 第 2 期売上 AS 売上 FROM 部門別売上) ORDER BY 部門コード, 期
- イSELECT 部門コード, '第 1 期' AS 期, 第 1 期売上 AS 売上 FROM 部門別売上 UNION (SELECT 部門コード, '第 2 期' AS 期, 第 2 期売上 AS 売上 FROM 部門別売上) ORDER BY 部門コード, 期
- ウSELECT A.部門コード, '第 1 期' AS 期, A.第 1 期売上 AS 売上 FROM 部門別売上 A CROSS JOIN (SELECT B.部門コード, '第 2 期' AS 期, B.第 2 期売上 AS 売上 FROM 部門別売上 B) T ORDER BY 部門コード, 期
- エSELECT A.部門コード, '第 1 期' AS 期, A.第 1 期売上 AS 売上 FROM 部門別売上 A INNER JOIN (SELECT B.部門コード, '第 2 期' AS 期, B.第 2 期売上 AS 売上 FROM 部門別売上 B) T ON A.部門コード = T.部門コード ORDER BY 部門コード, 期
答えと解説を見る
✓ これが正解イSELECT 部門コード, '第 1 期' AS 期, 第 1 期売上 AS 売上 FROM 部門別売上 UNION (SELECT 部門コード, '第 2 期' AS 期, 第 2 期売上 AS 売上 FROM 部門別売上) ORDER BY 部門コード, 期
解説
横に並ぶ二列を縦の行へ倒すのは行の足し算です。
設問は、期ごとの売上が横に二列で並んでいる表から、期を縦方向へ倒した問合せ結果を得る SQL 文を、四通りの中から選ばせています。四つの文は前半がほとんど同じで、二つの問合せをどうつなぐかという一語だけが違うので、そこだけを見比べれば決まります。ですから見分けの軸は、そのつなぎ方が、二つの結果の行を上下に足し合わせるものかどうか、という一点だけです。元の表は三行、求める結果は六行ですから、行が増える向きの演算でなければ届きません。行を足し合わせる集合演算がその働きに当たります。
ほかの選択肢はなぜ違うのか
- アSELECT 部門コード, '第 1 期…:二つの結果に共通して現れる行だけを残すつなぎ方です。片方の問合せは第1期、もう片方は第2期という値を持つので共通する行は一つもなく、結果は空になってしまいます。
- ウSELECT A.部門コード, '第 1…:二つの結果のすべての行どうしを総当たりで組み合わせるつなぎ方です。三行と三行で九行に膨らみ、ある部門の行に別の部門の売上が並ぶ組合せまで現れてしまいます。
- エSELECT A.部門コード, '第 1…:部門コードが一致する行どうしを横につなぐつなぎ方です。行数は三行のままで、選び出す列も第1期の値だけなので、期を縦に並べた六行の結果にはたどり着きません。
この問題の用語
- 部門組織の中で、仕事の種類や担当ごとに分けられたまとまりです。専門ごとに分ける分け方と、製品や地域ごとに分ける分け方があります。
出典:令和3年度 秋期 応用情報技術者試験 午前 問29
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)