基本情報技術者試験 - 令和8年公開問題 - 問7
次のSQL文によって定義され,値が格納されている“商品”表に対して,制約違反で実行エラーとなるSQL文はどれか。
〔SQL文〕
CREATE TABLE 商品
(商品コード CHAR(4)PRIMARY KEY,商品名 VARCHAR(21),
仕入先コード CHAR(4),仕入単価 INT,在庫数 INT)
商品
〔SQL文〕
CREATE TABLE 商品
(商品コード CHAR(4)PRIMARY KEY,商品名 VARCHAR(21),
仕入先コード CHAR(4),仕入単価 INT,在庫数 INT)
商品
| 商品コード | 商品名 | 仕入先コード | 仕入単価 | 在庫数 |
| A111 | テレビ | S001 | 75,000 | 0 |
| A222 | デジタルカメラ | S002 | 50,000 | 50 |
| A333 | DVDプレーヤ | NULL | NULL | NULL |
| A444 | 洗濯機 | S004 | 45,000 | 20 |
| ア | DELETE FROM 商品 WHERE 仕入先コード IS NULL |
|---|---|
| イ | INSERT INTO 商品 VALUES('A555','空気清浄機','S005',60000,50) |
| ウ | UPDATE 商品 SET 商品コード = 'A666' WHERE 商品コード = 'A444' |
| エ | UPDATE 商品 SET 商品コード = 'A777' WHERE 在庫数 >= 20 |
答え : エ
分野 : テクノロジ系 › 技術要素 › データベース › データ操作
解説 :
この問題はSQLとデータベースの制約(主キー制約など)に関する理解を問うものです。“商品”表では「商品コード」がPRIMARY KEY(主キー)に指定されているため,商品コードの値は表の中で重複してはいけないというルールがあります。選択肢「エ」のSQL文は,在庫数が20以上の商品(A222・A444の2件)すべての商品コードを一度に 'A777' へ変更しようとする内容です。もし対象が複数件ある場合,両方が同じ 'A777' という値になってしまい,主キーの一意性(重複禁止)に違反してエラーとなります。従ってこれが正解です。
「ア」は仕入先コードが NULL の行(A333)を削除するだけで問題ありません。「イ」は新しい商品コード 'A555' を追加するだけで重複しません。「ウ」は商品コードが1件しか一致しないため,単独の更新であり問題は起きません。主キー制約は「表全体で値が重複しないこと」を保証する仕組みだと理解しておきましょう。
分野 : テクノロジ系 › 技術要素 › データベース › データ操作
解説 :
この問題はSQLとデータベースの制約(主キー制約など)に関する理解を問うものです。“商品”表では「商品コード」がPRIMARY KEY(主キー)に指定されているため,商品コードの値は表の中で重複してはいけないというルールがあります。選択肢「エ」のSQL文は,在庫数が20以上の商品(A222・A444の2件)すべての商品コードを一度に 'A777' へ変更しようとする内容です。もし対象が複数件ある場合,両方が同じ 'A777' という値になってしまい,主キーの一意性(重複禁止)に違反してエラーとなります。従ってこれが正解です。
「ア」は仕入先コードが NULL の行(A333)を削除するだけで問題ありません。「イ」は新しい商品コード 'A555' を追加するだけで重複しません。「ウ」は商品コードが1件しか一致しないため,単独の更新であり問題は起きません。主キー制約は「表全体で値が重複しないこと」を保証する仕組みだと理解しておきましょう。