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

- ア 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'
解答・解説を見る
正解:エ
AI解説
UNIQUE制約は指定した列の組(ここではA,B)の値が重複しないことを保証するが、NULLは値ではないため比較対象にならず、NULLを含む行は制約違反にならない。エのUPDATEは、A='AA01'の行のAを'AA02'に変更した結果、既存の(A,B)=('AA02','BB02')などと同じ組合せが生じて重複するため、制約違反となる。 ア: DELETEは行を削除するだけで新たな重複を生まないため、UNIQUE制約に違反することはない。 イ: BにNULLを含む行の挿入である。NULLは他の値と等しいとは判定されないため、一意性違反にはならない。 ウ: AもBもNULLの行の挿入であり、同様にNULLを含む組は重複と見なされず違反にならない。 エ: 更新後の(A,B)の組が表内の既存行と同じ組合せになるため、一意性制約に違反する。正しい(違反する)肢である。 💡 「UNIQUE制約はNULLを許す(主キーはNULL不可)」が最重要の判断基準。INSERTだけでなくUPDATEでも重複が生じれば違反になる点がひっかけどころである。
※Web掲載用に表記を一部変更しています。図表はIPA公式問題冊子から引用しています。著作権はIPAに帰属します。