平成27年度 春期 応用情報技術者試験 午前 問28
テクノロジ/データベース“学生”表が次のSQL文で定義されているとき,検査制約の違反となるSQL文はどれか。 CREATE TABLE 学生 (学生番号 CHAR(5) PRIMARY KEY, 学生名 CHAR(16), 学部コード CHAR(4), 住所 CHAR(16), CHECK (学生番号 LIKE 'K%')) 学生 学生番号|学生名|学部コード|住所 K1001|田中太郎|E001|東京都 K1002|佐藤一美|E001|茨城県 K1003|髙橋肇|L005|神奈川県 K2001|伊藤香織|K007|埼玉県 (注:本サイトでは原問題の表を文字表記に変換しています)
出典:平成27年度 春期 応用情報技術者試験 午前 問28
- アDELETE FROM 学生 WHERE 学生番号 = 'K1002'
- イINSERT INTO 学生 VALUES ('J2002','渡辺次郎','M006','東京都')
- ウSELECT * FROM 学生 WHERE 学生番号 = 'K1001'
- エUPDATE 学生 SET 学部コード = 'N001' WHERE 学生番号 LIKE 'K%'
正解:イ
解説
CHECK制約は学生番号が'K'で始まることを要求しています。INSERT文で学生番号'J2002'を挿入しようとすると,'K'で始まらないためこの検査制約に違反します。
選択肢ごとの解説
- ア誤り。DELETEは既存の行を削除する操作であり,検査制約には抵触しません。
- イ正しい。学生番号'J2002'は'K'で始まらないため,CHECK制約(学生番号 LIKE 'K%')に違反します。
- ウ誤り。SELECTはデータを検索するだけで,データの追加・変更を伴わないため制約違反にはなりません。
- エ誤り。UPDATEは学生番号がK%に一致する行の学部コードのみを変更しており,学生番号自体は変更していないため検査制約に抵触しません。