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

分野:データベース|実際に出題されたIPA過去問題

“部門別売上”表から,部門コードごと,期ごとの売上を得るSQL文はどれか。

問題の図表(IPA公式問題冊子より引用)
図表:IPA公式問題冊子より
  1.  SELECT 部門コード, '第1期' AS 期, 第1期売上 AS 売上 FROM 部門別売上 INTERSECT (SELECT 部門コード, '第2期' AS 期, 第2期売上 AS 売上 FROM 部門別売上) ORDER BY 部門コード, 期
  2.  SELECT 部門コード, '第1期' AS 期, 第1期売上 AS 売上 FROM 部門別売上 UNION (SELECT 部門コード, '第2期' AS 期, 第2期売上 AS 売上 FROM 部門別売上) ORDER BY 部門コード, 期
  3.  SELECT A.部門コード, '第1期' AS 期, A.第1期売上 AS 売上 FROM 部門別売上 A CROSS JOIN (SELECT B.部門コード, '第2期' AS 期, B.第2期売上 AS 売上 FROM 部門別売上 B) T ORDER BY 部門コード, 期
  4.  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 部門コード, 期
解答・解説を見る

正解:イ

AI解説

“部門別売上”表は部門ごとに第1期売上・第2期売上を列として持つ横持ちのデータである。これを部門コード・期・売上の縦持ち形式に変換するには、第1期分の行と第2期分の行をそれぞれSELECTしUNION(和集合、重複除去)で結合すればよい。 ア: INTERSECT(共通集合)は両方のSELECT結果に共通する行だけを抽出する演算であり、第1期分と第2期分の行を両方とも残して縦持ちにする目的には合わない。 イ: 第1期分の行を返すSELECT文と第2期分の行を返すSELECT文をUNIONで結合すれば、部門コードごと・期ごとの売上を1行ずつ持つ縦持ちの結果が得られるため、これが正解である。 ウ: CROSS JOIN(直積)は両方の結果セットの行を総当たりで掛け合わせてしまうため、単純に行を積み上げたい(縦持ちにしたい)目的には適さず、行数が意図せず増えてしまう。 エ: INNER JOIN(内部結合)は部門コードが一致する行同士を横に連結してしまうため、第1期・第2期を別々の行として並べる縦持ち変換の目的には合わない。 💡 『横持ち(列で持つ)データを縦持ち(行で持つ)データに変換したい』ときはUNION(ALL)で複数のSELECT結果を積み上げる、というパターンを覚えておくと応用が利く。

出典:令和3年度 秋期 応用情報技術者試験 午前 問29 / 独立行政法人情報処理推進機構(IPA)
※Web掲載用に表記を一部変更しています。図表はIPA公式問題冊子から引用しています。著作権はIPAに帰属します。
📱 演習アプリで解く(無料・登録不要・2,640問収録)

「データベース」分野の攻略ポイント

関係モデル・正規化・SQL・トランザクション管理・障害回復・データベース設計が中心です。計算問題は少なく、定義と手順を正確に覚えていれば確実に得点できる、いわば「取りこぼしてはいけない」分野です。特に正規形とACID特性は毎年のように形を変えて出ます。

データベースの攻略ポイントをすべて見る(要点5項目・ひっかけ3項目)→

同じ分野(データベース)の過去問