ホーム > データベーススペシャリスト試験 > 2013年

データベーススペシャリスト試験 2013年 午前211


三つの表取引先、商品、注文基底表上に注文123操作をするSQL文のうち、実行できるものはどれか。ここで、各表の列のうち下線のあるものは主キーである。
問題画像
DELETE FROM 注文123 WHERE 取引先ID = '111'
INSERT INTO 注文123 VALUES (8, '目白商店', 'レンチ', 3)
SELECT 取引先.名称 FROM 注文123
UPDATE 注文123 SET 数量 = 3 WHERE 取引先名='目白商店'(正解)

解説

ビュー「注文 123」の性質を整理

CREATE VIEW 注文123 AS
SELECT  注文.注文番号,
        取引先.名称      AS 取引先.名称,  -- 取引先表の列を別名無しで見出しに残す
        注文.数量
FROM    注文
  JOIN 取引先 ON 注文.取引先ID = 取引先.取引先ID
  JOIN 商品   ON 注文.商品番号 = 商品.商品番号
WHERE   注文.商品番号 = '123';
  • 基表を 3 つ結合した複合ビュー
    → SQL-92 標準では 更新系 (INSERT / UPDATE / DELETE) は不可
    (INSTEAD OF トリガ等の特別設定が無いかぎり)
  • 列構成
    1. 注文番号
    2. 取引先.名称(列名にドットを含むが、ビュー列として存在)
    3. 数量
読み取り専用ビューとしては SELECT は自由に実行できる。

各 SQL 文の可否

選択肢可否理由
DELETE … WHERE 取引先ID = '111'×ビューには 取引先ID 列が存在しない → 列名エラー
INSERT INTO 注文123 …×複数基表を持つビューは標準 SQL で INSERT 不可
SELECT 取引先.名称 FROM 注文123列名そのものがビューに存在。参照のみなので問題なし
UPDATE 注文123 …×UPDATE も結合ビューでは不可

結論

実際に実行できるのは ビューに対する単純な読み取り (SELECT) だけ。
したがって正しい選択肢は である。
← 前の問題へ次の問題へ →

©︎2025 情報処理技術者試験対策アプリ