応用情報技術者 2015年 春期 午前2 問28
問題文
“学生”表が次のSQL文で定義されているとき、検査制約の違反となるSQL文はどれか。
CREATE TABLE 学生(学生番号 CHAR(5) PRIMARYKEY,
学生名 CHAR(16)、
学部コード CHAR(4)、
住所 CHAR(16)、
CHECK(学生番号 LIKE 'K%'))

選択肢
ア:
DELETE FROM 学生 WHERE 学生番号 = 'K1002'
イ:
INSERT INTO 学生 VALUES ('J2002'、 '渡辺次郎'、 'M886'、 '東京都')
(正解)ウ:
SELECT * FROM 学生 WHERE 学生番号 = 'K1801'
エ:
UPDATE 学生 SET 学部コード = 'N001' WHERE 学生番号 LIKE 'K%'
学生表の検査制約違反となるSQL文【午前2 解説】
要点まとめ
- 結論:学生番号が「K」で始まるというCHECK制約に違反するのは、学生番号が「J」で始まるINSERT文(イ)です。
- 根拠:CREATE TABLE文のCHECK制約で「学生番号 LIKE 'K%'」と指定されており、学生番号は必ず「K」で始まらなければなりません。
- 差がつくポイント:DELETEやSELECT、UPDATEは制約違反にならず、INSERT時の値の妥当性を正確に判断できるかが重要です。
正解の理由
イのINSERT文は、学生番号に「J2002」と「K」以外の文字で始まる値を挿入しようとしているため、CHECK制約「学生番号 LIKE 'K%'」に違反します。
一方、アのDELETEは既存データの削除で制約違反にならず、ウのSELECTはデータ参照のみで制約に影響しません。エのUPDATEは学生番号を変更していないため制約違反にはなりません。
一方、アのDELETEは既存データの削除で制約違反にならず、ウのSELECTはデータ参照のみで制約に影響しません。エのUPDATEは学生番号を変更していないため制約違反にはなりません。
よくある誤解
CHECK制約はデータの挿入や更新時にのみ適用され、削除や参照操作では違反にならない点を誤解しやすいです。
また、UPDATEで学生番号以外の列を変更しても制約違反にはならないことも理解が必要です。
また、UPDATEで学生番号以外の列を変更しても制約違反にはならないことも理解が必要です。
解法ステップ
- CREATE TABLE文のCHECK制約内容を確認し、「学生番号 LIKE 'K%'」であることを把握する。
- 各SQL文の操作内容を確認し、制約に影響するのはINSERTとUPDATEの値変更のみと判断する。
- INSERT文の学生番号が「K」で始まっているかをチェックする。
- 「J2002」は「K」で始まっていないため制約違反と判定する。
- 他の操作は制約違反にならないことを確認する。
選択肢別の誤答解説
- ア: DELETE文は既存の行を削除するだけで、CHECK制約違反にはなりません。
- イ: INSERT文で学生番号が「J」で始まっており、CHECK制約に違反しています。
- ウ: SELECT文はデータの参照のみで、制約違反にはなりません。
- エ: UPDATE文は学生番号を変更しておらず、CHECK制約違反にはなりません。
補足コラム
CHECK制約はテーブルの列に対して条件を設定し、データの整合性を保つために用いられます。
特に文字列のパターン制約はLIKE演算子で指定し、部分一致や先頭文字の制限を行うことが多いです。
INSERTやUPDATE時に制約違反があるとエラーとなり、データベースは操作を拒否します。
特に文字列のパターン制約はLIKE演算子で指定し、部分一致や先頭文字の制限を行うことが多いです。
INSERTやUPDATE時に制約違反があるとエラーとなり、データベースは操作を拒否します。
FAQ
Q: CHECK制約はどの操作でチェックされますか?
A: INSERTやUPDATE時に新しいデータが制約条件を満たしているかを検証します。DELETEやSELECTは対象外です。
A: INSERTやUPDATE時に新しいデータが制約条件を満たしているかを検証します。DELETEやSELECTは対象外です。
Q: LIKE 'K%'の意味は何ですか?
A: 文字列が「K」で始まることを意味し、先頭が「K」であれば条件を満たします。
A: 文字列が「K」で始まることを意味し、先頭が「K」であれば条件を満たします。
関連キーワード: CHECK制約、LIKE演算子、SQL制約、INSERT文、UPDATE文、データ整合性

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

