戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

システム監査技術者 2024年 午前2 問21


問題文

“納品”表と“顧客”表の自然結合と同じ結果を得るSQL文はどれか。
システム監査技術者 2024年 午前2 問21の問題画像

選択肢

ア:SELECT * FROM 納品 WHERE 納品.顧客番号 = (SELECT 顧客番号 FROM 顧客)
イ:SELECT * FROM 納品, 顧客 WHERE 納品.顧客番号 = 顧客.顧客番号
ウ:SELECT 納品.顧客番号, 納品.商品番号, 納品.納品数量 FROM 納品, 顧客 WHERE 納品.顧客番号 = 顧客.顧客番号
エ:SELECT 納品.顧客番号, 納品.商品番号, 納品.納品数量, 顧客.顧客名 FROM 納品, 顧客 WHERE 納品.顧客番号 = 顧客.顧客番号(正解)

🔒 解説は解答すると表示されます

自然結合の結果列【午前2解説】

正解の理由

自然結合では、2つの表に共通する列名を結合条件として使い、その列の値が一致する行を組み合わせます。結合結果には、共通列を重複して表示せず、各表のそれ以外の列も含めます。
「納品」表と「顧客」表の共通列は「顧客番号」です。したがって、結果に含まれる列は「顧客番号」「商品番号」「納品数量」「顧客名」です。
この列をすべて指定しているため、自然結合と同じ結果になるのは エ です。

解法ステップ

  1. 「納品」表と「顧客」表に共通する列名を確認します。
    共通するのは「顧客番号」です。
  2. 共通列の値が一致する行同士を結合すると判断します。
  3. 結果に必要な列を整理します。
    「顧客番号」は重複させずに1列、「商品番号」「納品数量」「顧客名」を加えます。
  4. 結合条件と、結果に含まれる列の両方が合っている選択肢を選びます。

選択肢別の誤答解説

  • ア:副問合せで「顧客番号」を取得し、納品表の行を絞り込んでいます。顧客表との結合ではないため、「顧客名」は得られません。また、副問合せが複数行を返すと、単一の値との比較としてエラーになります。
  • イ:「顧客番号」が一致する行同士を結合する点は適切です。しかし、全列を選ぶため、結果に「顧客番号」が2列含まれます。自然結合のように共通列を1列だけにした結果とは異なります。
  • ウ:結合条件は適切ですが、「顧客名」を選択していません。そのため、顧客表の情報を含む自然結合の結果とは列が異なります。
  • エ:「顧客番号」の一致で結合し、共通列を1列だけ選択したうえで、「顧客名」も含めています。自然結合と同じ列構成になります。

よくある誤解

  • 結合条件が同じなら、結果も必ず同じだと思う
    行の組合せが同じでも、選択する列が違えば結果は異なります。結合条件とSELECT句の両方を確認します。
  • SELECT * は共通列を自動的に1列にまとめると思う
    表を並べて結合する書き方では、SELECT * によって両表の列がすべて選ばれ、共通列が重複することがあります。
  • 自然結合は列名ではなく、同じ値の列を探して結合すると思う
    自然結合では、基本的に列名が共通する列を結合条件として使います。

補足コラム

この問題のように、FROM句に複数の表を書き、WHERE句で結合条件を指定する方法は、等価結合の書き方の一つです。自然結合と同じ結果にするには、結合条件だけでなく、共通列を重複させないようSELECT句で列を明示することがポイントです。

FAQ

Q. 自然結合では、共通列の値が異なる行も結果に残りますか?
A. 残りません。共通列の値が一致する行同士が結合されます。
Q. 自然結合の結果に「顧客番号」は含まれますか?
A. 含まれます。ただし、両方の表にあるからといって2列にはせず、通常は1列として扱います。
Q. 結合条件が正しければ、SELECT句を確認しなくてもよいですか?
A. いいえ。SELECT句によって出力される列が変わるため、自然結合と同じ結果かどうかは列構成も確認する必要があります。

関連キーワード: 自然結合、等価結合、結合条件、SELECT句、共通列
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

システム監査技術者を
クイズ形式で学習しませんか?

クイズ画面へ遷移する→

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について