応用情報技術者試験ナビ ロゴ 応用情報技術者試験ナビ
合格発表日:2025年7月3日(あと18日)

応用情報技術者試験 令和3年秋 午前問29 解説付き過去問

問題

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

正解

解説

この問題は、SQLを用いて「部門別売上」表から部門コードごと、かつ期ごとの売上データを得る処理内容を正確に理解しているかを問うものです。選択肢はすべて集合演算(INTERSECT、UNION、CROSS JOIN、INNER JOIN)を使った形式で構成されています。

  1. 中間表の確認
    問題で示されているSQL文はいずれも「SELECT department_code, period, sales FROM ~」の形で、1つは「期=2021-01」、もう1つは「期=2021-02」でフィルタされたデータを取り出しています。それぞれの中間表には、同じ部門コードでも異なる期の売上が記録されています。

  2. 集合演算の特徴
    選択肢に含まれる集合演算の特徴を以下に示します。
    1. INTERSECT:両方のSELECT文に共通するレコードのみを抽出します。
    2. UNION:両方のSELECT文のレコードをすべて取得し、重複は除外します。
    3. CROSS JOIN:2つの表の全ての行の組合せを作成します(直積)。
    4. INNER JOIN:共通のキー列に基づいて結合された行だけを出力します。
    問題では、「期ごとに」売上を得る必要があるため、2021-01と2021-02の両期に存在するデータを統合して出力する必要があります。したがって、最適な集合演算はUNIONです。

  3. UNIONの適切性
    UNIONは2つのSELECT文の結果を合成し、重複を除いた全レコードを出力します。今回の問題では、期が異なるため重複するレコードはなく、単純に各期のデータが合成されます。これは、部門コードごと・期ごとの売上データを取得するという要件に一致します。

したがって、「部門別売上」表から、部門コードと期ごとに売上を得るには、2つのSELECT文で期を分けたうえでUNION演算を用いるSQL文が適切です。