PREPARATION
受験対策

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

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

例題

3.10

次の SQL 文でテーブルを作成し、データを挿入した。

CREATE TABLE sample (id INTEGER, name VARCHAR(10), val INTEGER,
UNIQUE(id), CHECK(val >= 0));
INSERT INTO sample VALUES (1, 'aaa', 10), (2, 'bbb', 20);

ここで、次の SQL 文を順次実行した時、エラーになるものをすべて選びなさい。

  1. INSERT INTO sample VALUES (-1, 'zzz', 100);
  2. INSERT INTO sample VALUES (3, 'ccc', -100);
  3. UPDATE sample SET id = 1 WHERE id = 2;
  4. DELETE FROM sample WHERE id = 3;
  5. INSERT INTO sample (id, val) VALUES (3, 30);

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

解答と解説

テーブルには、列の値の一意性などの制約をつけることができます。
制約は、CREATE TABLE 文でテーブルを定義するときに設定することも、ALTER TABLE 文で後から設定することもできます。
本問の例では、CREATE TABLE 文によるテーブル定義時に id 列に関するUNIQUE(一意性)の制約と、val 列に関する val>=0 のチェック制約を設定しています。
従って、id 列の値が重複してしまうような SQL 文、および val 列の値が負になってしまうような SQL 文はエラーになります。
name 列については制約がありませんから、名前が重複したり、あるいは NULLであっても、エラーにはなりません。
CREATE TABLEに続き、id の値が 1 の行、2 の行の2行を挿入しています。
続いて実行される、選択肢の SQL 文ですが、
A は id の -1、val の 100 はいずれも制約に違反していませんからエラーにはなりません。
B は val の -100 が val>=0 という制約に違反するのでエラーとなります。
C は id が 2 の行の id を 1 に変更しようとしていますが、id=1 の行が既に存在しているため、一意性制約の違反で、やはりエラーとなります。
D は id が 3 の行を削除しようとしています。B がエラーとなったため、削除対象となる行は存在しません。つまり DELETE 文が実行されたにも関わらず行が削除されませんが、それ自体はエラーではありません。
E は id が 3、val が 30 の行を挿入しようとしています。この時点で id が 3の行は存在していませんから、制約には違反しません。name 列の値を指定していませんが、テーブル定義でデフォルト値を指定していないので、name は NULLになります。name 列には制約がないのでエラーにはなりません。

従って、エラーになるのは B と C です。

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

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

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

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

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

サンプル問題/例題解説

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

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

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

無料技術解説セミナー

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

OSS-DB道場

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

LPI-Japan
Platinum Sponsors