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

解法ステップ

  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) が重複し、制約違反となります。

よくある誤解

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

補足コラム

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 情報処理技術者試験対策アプリ

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