令和6年度 秋期 午前Ⅱ 問21
データベース
自然結合と同じ結果を得るSQL文
“納品”表と“顧客”表の自然結合と同じ結果を得るSQL文はどれか。
表の構造:
納品
| 顧客番号 | 商品番号 | 納品数量 |
|---|
顧客
| 顧客番号 | 顧客名 |
|---|
- アSELECT * FROM 納品 WHERE 納品.顧客番号 = (SELECT 顧客番号 FROM 顧客)
- イSELECT * FROM 納品,顧客 WHERE 納品.顧客番号 = 顧客.顧客番号
- ウSELECT 納品.顧客番号,納品.商品番号,納品.納品数量 FROM 納品,顧客 WHERE 納品.顧客番号 = 顧客.顧客番号
- エSELECT 納品.顧客番号,納品.商品番号,納品.納品数量,顧客.顧客名 FROM 納品,顧客 WHERE 納品.顧客番号 = 顧客.顧客番号
答えと解説を見る
✓ これが正解エSELECT 納品.顧客番号,納品.商品番号,納品.納品数量,顧客.顧客名 FROM 納品,顧客 WHERE 納品.顧客番号 = 顧客.顧客番号
解説
自然結合は共通の列で結合し、その列を一つだけ残した結果になります。
自然結合は、二つの表に共通する同じ名前の列(ここでは顧客番号)の値が等しい行どうしを結合し、その共通の列を結果に一つだけ残す演算です。納品表の列は顧客番号、商品番号、納品数量、顧客表の列は顧客番号、顧客名なので、自然結合の結果の列は、顧客番号、商品番号、納品数量、顧客名の四つになります。SQLで同じ結果を得るには、FROM句に二つの表を並べ、WHERE句で納品.顧客番号=顧客.顧客番号を条件にしたうえで、SELECT句で四つの列を一つずつ指定します。結合の条件だけでなく、結果に残る列の数と顔ぶれまで照らし合わせるのが見分け方です。
ほかの選択肢はなぜ違うのか
- アSELECT * FROM 納品 WHE…:副問合せは顧客表の顧客番号をすべて返すので、顧客が複数いれば等号で一つの値と比べる条件は成り立たず、エラーになります。しかも取り出すのは納品表の列だけで、顧客名を含みません。
- イSELECT * FROM 納品,顧客 …:結合の条件は正しいものの、SELECT * としているため、納品表と顧客表の両方の顧客番号が結果に現れます。共通の列が二つ残るので、共通の列を一つにまとめる自然結合とは列の数が合いません。
- ウSELECT 納品.顧客番号,納品.商品…:結合の条件は正しいものの、取り出す列が納品表の三つだけで、顧客表の顧客名が結果に含まれていません。自然結合では顧客名も結果に残るため、列が一つ足りません。
出典:令和6年度 秋期 システム監査技術者試験 午前Ⅱ 問21
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)