令和8年度 科目A 問7
データベース
SQL文
次の SQL 文によって定義され,値が格納されている“商品”表に対して,制約違反で実行エラーとなる SQL 文はどれか。
〔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
答えと解説を見る
✓ これが正解エUPDATE 商品 SET 商品コード = 'A777' WHERE 在庫数 >= 20
解説
在庫数20以上の2行が同じ商品コードになり主キーが重複します。
商品コードには PRIMARY KEY が指定されているので、主キーとして表の中で値が重複してはならず、NULL も許されません。在庫数が20以上の行に商品コードを一括で設定する更新文を考えます。条件に当てはまるのは、在庫数50のデジタルカメラの行と在庫数20の洗濯機の行の2行です。両方の商品コードが同じ値に書き換えられるため、主キーの重複が起きて制約違反となります。在庫数が NULL の行は、比較の結果が真にならないので対象に含まれません。更新文では、WHERE 句で何行が選ばれ、その全行に同じ値が入ることでキーが重複しないかを確かめると判断できます。
ほかの選択肢はなぜ違うのか
- アDELETE FROM 商品 WHERE…:仕入先コードが NULL の行、つまり DVDプレーヤの行を削除する文です。示された表定義には削除を妨げる制約がなく、行を消しても主キーの重複や NULL は生じないので、エラーにはなりません。
- イINSERT INTO 商品 VALUE…:追加する行の商品コードは既存のどの行とも異なり、ほかの列の値も定義された型に合っています。主キーの重複も NULL も生じないため、この文は問題なく実行されます。
- ウUPDATE 商品 SET 商品コード …:条件に当てはまるのは洗濯機の行1行だけで、新しい商品コードもほかの行と重なりません。主キーの値は変わりますが一意性は保たれるので、制約違反にはなりません。
出典:令和8年度 基本情報技術者試験 科目A 問7
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)