IPA過去問ドリル

令和3年度 秋期 応用情報技術者試験 午前 問29

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

“部門別売上”表から,部門コードごと,期ごとの売上を得る 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) (注:本サイトでは原問題の表を文字表記に変換しています)

出典:令和3年度 秋期 応用情報技術者試験 午前 問29

正解:イ

解説

第1期の行(部門コード,'第1期',第1期売上)と第2期の行(部門コード,'第2期',第2期売上)をそれぞれ SELECT で作り,両者を縦に連結すれば問合せ結果が得られます。行の集合を縦に連結する演算は UNION です。

選択肢ごとの解説

  • 誤り。INTERSECT は両方の問合せ結果に共通する行だけを返します。第1期と第2期の行は期の値が異なり共通行がないため,結果は0行になります。
  • 正しい。第1期の行と第2期の行を UNION で縦に連結することによって,部門コードごと,期ごとの売上が得られます。
  • 誤り。CROSS JOIN は2つの問合せ結果の直積(全組合せ)を作るため,行数が 3×3=9 行となり,期待する結果になりません。
  • 誤り。INNER JOIN では第1期の値と第2期の値が同じ行に横に並ぶ形となり,SELECT 句で第1期売上だけを取り出しても第2期の行は得られません。
応用情報技術者の過去問を演習モードで解く