DBデータベーススペシャリスト試験 午前Ⅱ

平成23年度特別 データベーススペシャリスト 午前Ⅱ 問8

問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。

問題

“取引先”表,“商品”表,“注文”表の3表を基底表とするビュー“注文123”を操作するSQL文のうち,実行できるものはどれか。ここで,各表の列のうち下線のあるものを主キーとする。 CREATE VIEW 注文123 AS SELECT 注文番号,取引先.名称 AS 取引先名,数量 FROM 注文,取引先,商品 WHERE 注文.商品番号 = '123' AND 注文.取引先ID = 取引先.取引先ID AND 注文.商品番号 = 商品.商品番号
取引先,商品,注文の三つの基底表と,各表の主キー及び全行データ。
取引先,商品,注文の三つの基底表と,各表の主キー及び全行データ。

選択肢

  1. ア
    DELETE FROM 注文123 WHERE 取引先ID = '111'
  2. イ
    INSERT INTO 注文123 VALUES (8,'目白商店','レンチ',3)
  3. ウ
    SELECT 取引先.名称 FROM 注文123
  4. エ
    UPDATE 注文123 SET 数量 = 3 WHERE 取引先名 = '目白商店'
解き方のヒントを見る

SQL抽出条件を読む視点

SQLの抽出条件と結果を対応させるときは、条件がどの行を対象にするかという視点に絞り、処理の順序や条件同士の関係を落ち着いて整理しましょう。

この問題で問われていること

各条件が対象行の判定にどのように関わるかを確認し、複数の条件がある場合は、それぞれを個別に捉えてから全体の関係を考えることに集中してください。

視点

抽出条件を読む際は、対象となる行の範囲、条件の組み合わせ方、条件適用後に残る情報の種類を順番に整理すると、結果との対応を確認しやすくなります。

確認ポイント

  • 条件ごとに対象を確認する
  • 複数条件の関係を整理する
  • 抽出後に残る情報の特徴を確認する
正解と解説を見る

正解

エ

解説

ビュー「注文123」は商品番号123の注文だけを取り出し、取引先表と商品表を主キーで結合している。各ビュー行を注文表の行へ対応付けられるため、注文表由来の数量を更新する操作が実行できる。

理由

取引先IDと商品番号はそれぞれ取引先表と商品表の主キーです。そのため、注文表の各行に対する結合先は高々1行に定まり、ビューの各行を元の注文表の行へ対応付けられる。ビューの数量は注文表由来なので、その列の更新が可能になる。

比較

一方、ビューに存在しない列を条件に使う操作、ビューの列数や定義と一致しない値を挿入する操作、ビューの外側で基底表の別名を参照する操作は、列構成またはSQL文の有効範囲に適合しない。

選択肢ア

これは不正解だよ。ビュー「注文123」の列は注文番号、取引先名、数量であり、取引先IDはビューの列として公開されていない。また、取引先IDを条件にしても、このビュー定義だけから削除対象の注文表の行を指定する形にならず、実行できる操作とはいえない。

選択肢イ

これは不正解だよ。ビューの定義列は注文番号、取引先名、数量の3列であるのに対し、VALUESには4個の値が指定されており、列数が一致しない。さらに、ビューは商品番号123に限定された結合結果であり、指定値だけではその条件も満たす形になっていない。

選択肢ウ

これは不正解だよ。注文123は取引先表の名称を取引先名という列名で公開しているが、ビューを参照するSELECT文のFROM句に取引先表は含まれていない。そのため、取引先.名称という基底表の修飾名を注文123の参照範囲で使用できない。

選択肢エ(正解)

これは正解だよ。取引先IDと商品番号による結合先は各表の主キーで高々1行に定まり、ビューの各行を注文表の行へ対応付けられる。数量は注文表由来の列なので、取引先名で対象行を絞り込み、注文表の数量を3に更新できる。

学習のポイント

結合ビューでは、列の公開だけでなく、主キーによる行の一意な対応付けを確認する。

出典:独立行政法人 情報処理推進機構(IPA)平成23年度特別 データベーススペシャリスト試験 午前Ⅱ 問8(公式資料:問題冊子(PDF) / 解答例)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針