応用情報技術者試験 令和3年秋 午前問29 解説付き過去問
問題
"部門別売上"表から、部門コードごと、期ごとの売上を得るSQL文はどれか。


正解
解説
この問題は、SQLを用いて「部門別売上」表から部門コードごと、かつ期ごとの売上データを得る処理内容を正確に理解しているかを問うものです。選択肢はすべて集合演算(INTERSECT、UNION、CROSS JOIN、INNER JOIN)を使った形式で構成されています。
- 中間表の確認
問題で示されているSQL文はいずれも「SELECT department_code, period, sales FROM ~」の形で、1つは「期=2021-01」、もう1つは「期=2021-02」でフィルタされたデータを取り出しています。それぞれの中間表には、同じ部門コードでも異なる期の売上が記録されています。 - 集合演算の特徴
選択肢に含まれる集合演算の特徴を以下に示します。
- INTERSECT:両方のSELECT文に共通するレコードのみを抽出します。
- UNION:両方のSELECT文のレコードをすべて取得し、重複は除外します。
- CROSS JOIN:2つの表の全ての行の組合せを作成します(直積)。
- INNER JOIN:共通のキー列に基づいて結合された行だけを出力します。
- UNIONの適切性
UNIONは2つのSELECT文の結果を合成し、重複を除いた全レコードを出力します。今回の問題では、期が異なるため重複するレコードはなく、単純に各期のデータが合成されます。これは、部門コードごと・期ごとの売上データを取得するという要件に一致します。
したがって、「部門別売上」表から、部門コードと期ごとに売上を得るには、2つのSELECT文で期を分けたうえでUNION演算を用いるSQL文が適切です。