SAシステムアーキテクト試験 午前Ⅱ
平成21年度秋期 システムアーキテクト 午前Ⅱ 問23
問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。
問題

選択肢
- アSELECT * FROM 納品、顧客 WHERE 納品.顧客番号 = 顧客.顧客番号
- イSELECT 顧客.顧客番号、納品.商品番号、納品.納品数量、顧客.顧客名 FROM 納品、顧客 WHERE 納品.顧客番号 <> 顧客.顧客番号
- ウSELECT 納品.顧客番号、納品.商品番号、納品.納品数量 FROM 納品 WHERE 納品.顧客番号 IN (SELECT 顧客番号 FROM 顧客)
- エSELECT 納品.顧客番号、納品.商品番号、納品.納品数量、顧客.顧客名 FROM 納品、顧客 WHERE 納品.顧客番号 = 顧客.顧客番号
解き方のヒントを見る
SQL条件を読み解く視点
抽出条件と結果の対応を考えるときは、条件がどのデータのまとまりに、どの段階で影響するかを整理し、表示される行や列を落ち着いて照合する視点を持ちましょう。全体の関係を確認してください。
この問題で問われていること
一つの観点として、条件の対象範囲と適用される順序を、問題文の記述と結果の各部分に対応づけて確認しましょう。個別の答えを決める前に、どの情報が変化し、どれが変化しないかを見分けます。
視点
条件が対象とする範囲、結果に現れる情報、処理の流れを分けて整理し、それぞれの関係を表や文章と丁寧に照合します。
確認ポイント
- 条件が影響する対象の範囲を確認する
- 結果に現れる情報の種類を整理する
- 処理の前後で変化する点と変化しない点を比べる
正解と解説を見る
正解
エ
解説
自然結合は、両表の共通属性が同じ値をもつ行を対応付け、重複する共通列を一つに整理して結果を得る結合です。この設問では顧客番号で納品と顧客を結び付け、納品情報と顧客名を表示する指定が必要になる。
理由
納品表と顧客表は顧客番号で対応するため、同じ顧客番号を等号で比較する。さらに、納品側の顧客番号・商品番号・納品数量と顧客側の顧客名を選び、共通列を重複して表示しない形にする。したがってエが適切です。
比較
単に二表を等価条件で結合するだけでなく、自然結合の結果として必要な列を一度ずつ表示できるかがポイントです。不等号は異なる顧客を対応付け、部分問い合わせだけでは顧客名を結合結果に含められない。
選択肢ア
これは不正解だよ。顧客番号を等号で比較しているため、同じ顧客の行を対応付ける条件自体は合っている。しかしSELECT *は両表の全列を取り出すので、共通する顧客番号が重複して表示され、自然結合として求める列構成にならない。
選択肢イ
これは不正解だよ。SELECT句では納品情報と顧客名を指定しているが、WHERE句が顧客番号の不一致を条件にしている。そのため同じ顧客の納品と顧客を対応付けるのではなく、異なる顧客番号の組合せを選ぶことになり、結合条件が逆である。
選択肢ウ
これは不正解だよ。納品表の顧客番号が顧客表に存在するかをINで確認しているだけで、二表の列を結合していない。またSELECT句に顧客名がなく、顧客表の情報を結果へ取り出せないため、自然結合を表すSQL文にはならない。
選択肢エ(正解)
これは正解だよ。納品表と顧客表の顧客番号を等号で比較し、同じ顧客の行を対応付けている。さらに納品側の顧客番号・商品番号・納品数量と顧客側の顧客名を必要な列として指定し、共通列の重複表示も避けている。
学習のポイント
等価結合の条件と、重複列を避けたSELECT句の指定を区別して学ぶ。
出典:独立行政法人 情報処理推進機構(IPA)平成21年度秋期 システムアーキテクト試験 午前Ⅱ 問23(公式資料:問題冊子(PDF) / 解答例)
関連する過去問一覧
IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針