戦国IT - 情報処理技術者試験の過去問対策サイト
お知らせお問い合わせ料金プラン

応用情報技術者 2012年 秋期 午前228


問題文

R 表に、(A,B)の2列で一意にする制約 (UNIQUE 制約)が定義されているときR 表に対する SQL文のうち、この制約に違反するものはどれか。ここで、R 表には主キーの定義がなく、また、全ての列は値が決まっていない場合 (NULL) もあるものとする。
応用情報技術者 2012年 秋期 午前2 問28の問題画像

選択肢

DELETE FROM R WHERE A = ‘AA01’ AND B = ‘BB02’
INSERT INTO R(A, B, C, D) VALUES (‘AA01’、 NULL, ‘DD01’、 ‘EE01’)
INSERT INTO R(A, B, C, D) VALUES (NULL, NULL, ‘AA01’、 ‘BB02’)
UPDATE R SET A = ‘AA02’ WHERE A = ‘AA01’(正解)

R 表の UNIQUE 制約違反を問う問題【午前2 解説】

要点まとめ

  • 結論:選択肢エの UPDATE 文が UNIQUE 制約違反を引き起こします。
  • 根拠:UNIQUE 制約は (A, B) の組み合わせが重複しないことを保証し、UPDATE により既存の行と重複が生じます。
  • 差がつくポイント:NULL 値の扱いと、INSERT と UPDATE の違いを正確に理解し、制約違反の発生条件を見極めることが重要です。

正解の理由

選択肢エの UPDATE 文は、A 列の値を ‘AA01’ から ‘AA02’ に変更します。
元のデータにはすでに A=‘AA02’ の行が複数存在し、B 列の値も異なるため、(A, B) の組み合わせが重複する可能性があります。
具体的には、UPDATE により (A, B) = (‘AA02’、‘BB01’) の行が複数できてしまい、UNIQUE 制約に違反します。
一方、他の選択肢は NULL の扱いや削除・挿入で制約違反を起こしません。

よくある誤解

  • NULL を含む列は UNIQUE 制約の重複判定から除外されるため、NULL があれば重複しても問題ないと誤解しがちです。
  • DELETE 文はデータを削除するため、制約違反を起こすことはありません。

解法ステップ

  1. UNIQUE 制約の対象列 (A, B) の組み合わせを確認する。
  2. 各選択肢の SQL 文が (A, B) の組み合わせにどのような影響を与えるか検討する。
  3. NULL 値の扱いを理解し、NULL 同士は重複とみなされないことを確認する。
  4. UPDATE 文で既存の (A, B) の組み合わせが重複するかどうかを判断する。
  5. 制約違反が起きる選択肢を特定する。

選択肢別の誤答解説

  • ア: DELETE 文は行を削除するため、制約違反は起きません。
  • イ: INSERT 文で B に NULL が入るため、(A, B) の組み合わせは重複しません。
  • ウ: INSERT 文で A, B 両方が NULL のため、UNIQUE 制約違反にはなりません。
  • エ: UPDATE 文で A の値を ‘AA02’ に変更し、既存の行と (A, B) が重複し、制約違反となります。

補足コラム

UNIQUE 制約は複数列の組み合わせで重複を防ぐため、NULL 値が含まれる場合は重複判定から除外されます。
これは SQL 標準の仕様であり、NULL は「不明な値」として扱われるため、NULL 同士は等しくないと判断されます。
また、主キー制約は NULL を許さず、必ず一意である必要がありますが、今回の表には主キーが定義されていません。

FAQ

Q: UNIQUE 制約の対象列に NULL がある場合、重複は許されますか?
A: はい、NULL は重複判定から除外されるため、NULL を含む行は重複しても制約違反になりません。
Q: DELETE 文で UNIQUE 制約違反は起きますか?
A: いいえ、DELETE は行を削除するため、制約違反を引き起こすことはありません。
Q: UPDATE 文で UNIQUE 制約違反を防ぐにはどうすればよいですか?
A: 更新後の値が既存の行と重複しないように注意し、必要に応じて事前に重複チェックを行うことが重要です。

関連キーワード: UNIQUE 制約、NULL の扱い、UPDATE 文、SQL 制約違反、複合一意制約
← 前の問題へ次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

応用情報技術者
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてプライバシーポリシー利用規約特商法表記開発者について