応用情報技術者試験 応用情報技術者試験 令和3年度秋期 午前29: “部門別売上”表から,部門コードごと,期ごとの売上を得る SQL 文はどれか。 部門別売上 〔問合せ結果〕

応用情報技術者試験 令和3年度秋期 午前
Q 2929 / 80
“部門別売上”表から,部門コードごと,期ごとの売上を得る SQL 文はどれか。 部門別売上
部門コード第 1 期売上第 2 期売上
D011,0004,000
D022,0005,000
D033,0008,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
この問の正解率:62.97%(659件)

問題本文

“部門別売上”表から,部門コードごと,期ごとの売上を得る SQL 文はどれか。 部門別売上 〔問合せ結果〕

選択肢

  • .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 部門コード,期

解説

横持ち(部門ごとに第1期売上・第2期売上が列で並ぶ)の表を、縦持ち(部門コード・期・売上の行)に変換するSQLを問う問題である。第1期分を取り出すSELECTと第2期分を取り出すSELECTを、行方向に積み上げる和演算(UNION)で結合すれば、各部門について第1期・第2期の2行が得られ、求める結果になる。したがって正解はイ。

選択肢ごとの解説

  • .INTERSECT(積集合)は両方のSELECT結果に共通する行だけを返すが、第1期分と第2期分は期・売上の値が異なり共通行が存在しないため、結果は空になり誤り。
  • .正しい。第1期分と第2期分のSELECTをUNION(和)で縦に結合することで、各部門×各期の行が得られ、求める縦持ちの結果が得られる。
  • .CROSS JOIN(直積)は両者の全行を総当たりで組み合わせるため行数が3×3=9行に膨れ上がり、求める6行の結果にならず誤り。
  • .INNER JOINは部門コードで横に結合するため、1部門につき第1期売上と第2期売上が同じ行に並ぶ横持ちの結果になり、縦持ちの求める形にならないため誤り。

応用情報技術者試験 令和3年度秋期 午前過去問一覧へ戻る・問29