令和6年度 秋期 システム監査技術者試験 午前II 問21
【問題21】
「納品」表と「顧客」表の自然結合と同じ結果を得る SQL 文はどれか。
SELECT * FROM 納品 WHERE 納品.顧客番号 = (SELECT 顧客番号 FROM 顧客)
SELECT * FROM 納品, 顧客 WHERE 納品.顧客番号 = 顧客.顧客番号
SELECT 納品.顧客番号, 納品.商品番号, 納品.納品数量 FROM 納品, 顧客 WHERE 納品.顧客番号 = 顧客.顧客番号
SELECT 納品.顧客番号, 納品.商品番号, 納品.納品数量, 顧客.顧客名 FROM 納品, 顧客 WHERE 納品.顧客番号 = 顧客.顧客番号
【解説】
ア: SELECT * FROM 納品 WHERE 納品.顧客番号 = (SELECT 顧客番号 FROM 顧客)
誤り。「納品」表の顧客番号が顧客表の1つの値と一致するレコードしか取得できず、結合になっていません。
イ: SELECT * FROM 納品, 顧客 WHERE 納品.顧客番号 = 顧客.顧客番号
誤り。このSQL自体は動きますが、*で共通列「顧客番号」が重複して表示されるため、自然結合の形式とは異なります。
ウ: SELECT 納品.顧客番号, 納品.商品番号, 納品.納品数量 FROM 納品, 顧客 WHERE 納品.顧客番号 = 顧客.顧客番号
誤り。「顧客」表の情報(例えば顧客名)が含まれておらず、自然結合の完全な形ではありません。
エ: SELECT 納品.顧客番号, 納品.商品番号, 納品.納品数量, 顧客.顧客名 FROM 納品, 顧客 WHERE 納品.顧客番号 = 顧客.顧客番号
正しい。共通列である「顧客番号」で結合し、両表の関連情報がすべて表示される自然結合と同等の出力になります。
【答え】
エ: SELECT 納品.顧客番号, 納品.商品番号, 納品.納品数量, 顧客.顧客名 FROM 納品, 顧客 WHERE 納品.顧客番号 = 顧客.顧客番号
出典:令和6年度 秋期 システム監査技術者試験 午前II 問21