PREPARATION
受験対策

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

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

例題

3.12

以下の一連の SQL 文により、テーブルを定義し、データを挿入した。

CREATE TABLE sample (id INTEGER PRIMARY KEY,
val1 VARCHAR(10) DEFAULT 'abc' NOT NULL,
val2 VARCHAR(10) UNIQUE);
INSERT INTO sample VALUES (1, 'aaa', 'xxx');
INSERT INTO sample VALUES (2, 'bbb', NULL);
INSERT INTO sample VALUES (3, 'ccc', 'zzz');

続いて実行したときにエラーとなる SQL 文をすべて選びなさい。


  1. INSERT INTO sample VALUES (4, NULL, 'abc');
  2. INSERT INTO sample (id) VALUES (5);
  3. INSERT INTO sample (val2) VALUES ('def');
  4. UPDATE sample SET val2 = 'zzz' WHERE id = 1;
  5. UPDATE sample SET val1 = 'ccc' WHERE id = 2;

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

解答と解説

テーブルには、そのデータが満たすべき条件を制約として定義することができます。
この例題の sample テーブルでは、id 列に PRIMARY KEY、val1 列に NOT NULL、val2 列に UNIQUE という制約が付与されています。
NOT NULL は、その列の値が NULL であってはならない、という制約です。
UNIQUE は、その列の値が一意である、つまりその列の値が同じであるような行は他に存在しない、という制約です。ただし、NULL 値だけは例外で、UNIQUE 制約のある列の値が NULL である行が複数あっても、制約違反にはなりません。
PRIMARY KEY は主キーと呼ばれ、制約としては NOT NULL と UNIQUE の両方を合わせた条件となります。
これらの制約は、INSERT 文によるデータの追加時、UPDATE 文によるデータの更新時のいずれにも適用されます。
また、INSERT 文でデータの値を指定しなかった場合のデフォルト値を DEFAULT として指定することができます。sample テーブルでは、val2 列に DEFAULT 句が定義されており、INSERT 文で val2 の値を指定しなければ、'abc' に設定されます。

例題の選択肢を順に見ていきましょう。
A は val1 に NULL を指定していますが、これは NOT NULL 制約に違反します。
val1 列には DEFAULT が指定されていますが、これは値を指定しなかった場合にのみ適用され、この例のように NULL を指定した場合は当てはまりません。
従ってエラーとなります。

B は id 列にのみ値を指定しています。val1 にはデフォルト値の 'abc' が入ります。val2 には NULL が入ります。val2 が NULL の行が既に存在しますが、NULL の行が複数あっても UNIQUE 制約の違反とはならないので、エラーにはなりません。

C は val2 列にのみ値を指定しています。このため id には NULL が入りますが、これは PRIMARY KEY 制約に違反するため、エラーとなります。

D は id=1 の行の val2 を 'zzz' に変更しようとしていますが、val2 が 'zzz' の行が既に存在するため、これは UNIQUE 制約に違反し、エラーとなります。

E は id=2 の行の val1 を 'ccc' に変更しようとしています。val1 列の制約は NOT NULL だけですので、これは問題ありません。

従って、正解は A, C, D です。

制約には、本問で紹介したもののほかに、CHECK制約、外部キー制約があります。合わせて理解しておきましょう。

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

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

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

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

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

サンプル問題/例題解説

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

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

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

無料技術解説セミナー

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

OSS-DB道場

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

LPI-Japan
Platinum Sponsors