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

応用情報技術者 2012年 秋期 午前2 問28


問題文

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'(正解)

🔒 解説は解答すると表示されます

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

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