AUシステム監査技術者試験 午前Ⅱ

令和6年度秋期 システム監査技術者 午前Ⅱ 問21

問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。

問題

“納品”表と“顧客”表の自然結合と同じ結果を得る SQL 文はどれか。
納品表は顧客番号,商品番号,納品数量の列をもち,顧客表は顧客番号,顧客名の列をもつ。
納品表は顧客番号,商品番号,納品数量の列をもち,顧客表は顧客番号,顧客名の列をもつ。

選択肢

  1. ア
    SELECT * FROM 納品 WHERE 納品.顧客番号 = (SELECT 顧客番号 FROM 顧客)
  2. イ
    SELECT * FROM 納品、 顧客 WHERE 納品.顧客番号 = 顧客.顧客番号
  3. ウ
    SELECT 納品.顧客番号、 納品.商品番号、 納品.納品数量 FROM 納品、 顧客 WHERE 納品.顧客番号 = 顧客.顧客番号
  4. エ
    SELECT 納品.顧客番号、 納品.商品番号、 納品.納品数量、 顧客.顧客名 FROM 納品、 顧客 WHERE 納品.顧客番号 = 顧客.顧客番号
解き方のヒントを見る

SQL抽出条件を読み解く視点

SQLの抽出結果を考えるときは、条件式を部分ごとに分け、対象となる行の属性と比較対象、複数条件の結び付きを順に整理する視点に注目します。そのうえで、条件が評価される単位を意識して全体を確認します。

この問題で問われていること

一つの条件だけで判断せず、各行について比較や論理条件がどのように組み合わさっているかを追い、抽出対象の判定過程を整理することに焦点を当てます。表記上の優先関係にも目を向けます。

視点

抽出条件は、列の値、比較の向き、条件同士の関係、値が特別な状態にある場合の扱いなど、複数の観点に分けて読むと整理しやすくなります。まず条件を小さな単位に区切り、各行に対する判定の流れを順に追い、最後に全体の組合せを見直します。

確認ポイント

  • 条件を列や比較単位ごとに分解して確認する
  • 複数条件の結び付きと評価のまとまりを確認する
  • 各行が条件を満たすかを順序立てて整理する
正解と解説を見る

正解

エ

解説

自然結合は、共通列である顧客番号の一致を条件に納品表と顧客表を結合し、共通列を重複させずに両表の列を結果として返す。したがって、顧客番号、商品番号、納品数量、顧客名を指定するエが該当する。

理由

納品表と顧客表の共通列は顧客番号です。自然結合はこの列の値が一致する行を結び付け、共通列を一つにまとめた結果を返す。この設問では、納品表の3列に顧客表の顧客名を加えた4列が結果になる。

比較

エは顧客番号同士の一致をWHERE句で指定し、SELECT句で納品表の3列と顧客名を重複なく指定している。そのため、自然結合と同じ行の組合せと列構成になる。

選択肢ア

これは不正解だよ。FROM句で納品表だけを指定し、顧客表の列を結果に含めていないため、自然結合で得られる顧客名を返せない。また、顧客表から顧客番号を一つだけ返す副問合せとして扱う形なので、表同士の自然結合と同じ結果にはならない。

選択肢イ

これは不正解だよ。納品表と顧客表を顧客番号で結合する条件自体は適切だが、SELECT *によって両表の列を全て返す。共通する顧客番号が重複して出力されるため、自然結合の列構成とは一致しない。

選択肢ウ

これは不正解だよ。顧客番号で納品表と顧客表を結合しているが、SELECT句で指定しているのは納品表の3列だけである。顧客表にある顧客名を結果へ含めていないため、自然結合と同じ列構成にはならない。

選択肢エ(正解)

これは正解だよ。納品表と顧客表を顧客番号の一致で結合し、納品表の顧客番号・商品番号・納品数量と顧客表の顧客名を指定している。共通列を重複させない自然結合と同じ結果になる。

学習のポイント

自然結合では、結合条件だけでなく共通列の重複を除いた出力列まで確認する。

出典:独立行政法人 情報処理推進機構(IPA)令和6年度秋期 システム監査技術者試験 午前Ⅱ 問21(公式資料:問題冊子(PDF) / 解答例)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針