令和6年度 秋期 システム監査技術者試験 午前Ⅱ 問21
テクノロジ/データベース“納品”表と“顧客”表の自然結合と同じ結果を得るSQL文はどれか。 〔表の構成〕 ・納品表:顧客番号,商品番号,納品数量 ・顧客表:顧客番号,顧客名 (注:本サイトでは原問題の表を文字表記に変換しています)
出典:令和6年度 秋期 システム監査技術者試験 午前Ⅱ 問21
- アSELECT * FROM 納品 WHERE 納品.顧客番号 = (SELECT 顧客番号 FROM 顧客)
- イSELECT * FROM 納品,顧客 WHERE 納品.顧客番号 = 顧客.顧客番号
- ウSELECT 納品.顧客番号,納品.商品番号,納品.納品数量 FROM 納品,顧客 WHERE 納品.顧客番号 = 顧客.顧客番号
- エSELECT 納品.顧客番号,納品.商品番号,納品.納品数量,顧客.顧客名 FROM 納品,顧客 WHERE 納品.顧客番号 = 顧客.顧客番号
正解:エ
解説
“納品”表(顧客番号,商品番号,納品数量)と“顧客”表(顧客番号,顧客名)を顧客番号で自然結合すると,共通する列である顧客番号は一つにまとめられ,結果の列は「顧客番号,商品番号,納品数量,顧客名」となる。この結果と同じものを得るSQL文は,両表を顧客番号で等結合し,SELECT句で納品.顧客番号,納品.商品番号,納品.納品数量,顧客.顧客名を明示的に指定するものである。
選択肢ごとの解説
- ア誤り。副問合せを用いたこのSQL文は納品表の列だけを取得するものであり,顧客表の列(顧客名)を含まないため,自然結合と同じ結果にはなりません。
- イ誤り。SELECT * を用いると,結合条件に使われた顧客番号が納品表と顧客表の両方から重複して出力されてしまい,自然結合で顧客番号が一つにまとめられる結果とは一致しません。
- ウ誤り。このSQL文は顧客表の顧客名を選択していないため,自然結合の結果に含まれる列が不足しています。
- エ正しい。納品.顧客番号,納品.商品番号,納品.納品数量,顧客.顧客名を選択するこのSQL文は,顧客番号が一つにまとめられた自然結合の結果と同じ列構成・内容を得られます。