PREPARATION
受験対策

Silverの例題解説
「S3.1 SQL コマンド(テーブル定義)」

今回は、Silverの「S3 開発/SQL - S3.1 SQL コマンド(テーブル定義)」からの出題です。

例題

3.04

次のSQL文を順次実行した。

CREATE TABLE dept (did INTEGER PRIMARY KEY, dname VARCHAR(50));
CREATE TABLE emp (eid INTEGER PRIMARY KEY, did INTEGER REFERENCES
dept(did), ename VARCHAR(50));
INSERT INTO dept VALUES (10, 'HR'), (20, 'FIN');
INSERT INTO emp VALUES (1, 10, 'Mary'), (2, 20, 'John');

続いて実行したときにエラーにならないSQL文を2つ選びなさい。

  1. INSERT INTO dept VALUES (20, 'Sales');
  2. INSERT INTO emp VALUES (3, 20, 'Mike');
  3. UPDATE dept SET did = 20 WHERE dname = 'HR';
  4. UPDATE emp SET did = 40 WHERE eid = 1;
  5. UPDATE emp SET eid = 4 WHERE ename = 'Mary';

※この例題は実際のOSS-DB技術者認定試験とは異なります。
例題公開日:2011年9月12日

解答と解説

テーブルには主キー、外部参照といった制約をつけることができます。
主キー(PRIMARY KEY)は、その列の値が一意で、かつNULLでないことが制約となります。
外部参照は、その列の値が他のテーブルの列を参照しているため、参照先のテーブルに値が存在していることが制約となります。
この例題では部門表(dept)と従業員表(emp)を作成し、dept 表では did 列が主キー、emp 表では eid が主キーとなっています。
また、emp 表の did 列は dept 表の did 列を外部参照しています。
テーブルの作成後、それぞれに2行ずつのデータを挿入しています。

Aは dept 表への挿入で、did に 20 を指定していますが、did が 20 の行が既に存在しているため、主キー制約の違反でエラーになります。

Bは emp 表への挿入で、eid が 3 の行はまだ存在しておらず、また、did の 20 は dept 表にありますから問題ありません。

Cは dept 表の HR の行の did を 20 に変更しようとしていますが、did が 20 の行が既に存在しているので、主キー制約の違反となります。

Dは emp 表の eid が 1 の行の did を 40 に変更しようとしていまが、dept 表に did が 40 の行がないので外部参照制約の違反となります。

Eは emp 表の Mary の行の eid を 4 に変更しようとしています。
主キーの値の変更はデータベースの運用管理上、望ましくないことが多いですが、この例題の場合、eid が 4 の行はありませんから更新は成功します。

従って、正解はBとEです。

今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。
採用になった方にはLPI-Japanオリジナルの記念品を贈呈します。

※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。

企業の基幹システムや業務システムでの
OSS-DBの採用がますます拡大している中、
昇格・昇給・就職・転職に必ず役立つ認定資格になります

OSS-DBの受験対策について

受験の学習をサポートする情報や対策に役立つ情報をご紹介

サンプル問題/例題解説

例題 のアーカイブを試験ごとにまとめています。OSS-DB技術者認定試験の学習にお役立てください

学習教材・教育機関のご紹介

OSS-DB認定教材や教育機関について詳しくご説明いたします。

無料技術解説セミナー

受験準備をされていらっしゃる方々を対象に、無料技術解説セミナーの日程をお知らせしています。

OSS-DB道場

受験準備をされていらっしゃる方々を対象に、無料技術解説セミナーの日程をお知らせしています。

LPI-Japan
Platinum Sponsors