修了試験 2018-01-28実施分 基本情報技術者試験 問28
R表に,(A, B)の2列で一意にする制約(UNIQUE制約)が定義されているとき,R表に対するSQL文のうち,この制約に違反するものはどれか。 ここで,R表には主キーの定義がなく,また,全ての列は値が決まっていない場合(NULL)もあるものとする。 〔表R〕A|B|C|D AA01|BB01|CC01|DD01 AA01|BB02|CC02|NULL AA02|BB01|NULL|DD03 AA02|BB03|NULL|NULL
正答4
解説
正解は4です。 (A, B)の2列の組合せに一意性制約(UNIQUE制約)が定義された表で、制約に違反するSQL文を選ぶ問題です。 UNIQUE制約は、指定した列の値の組合せが他の行と重複することを禁止します。 SQLの標準では、NULLは値が決まっていない状態を表すので、NULLを含む組合せは重複とみなされません。 【選択肢別解説】 1:× DELETE文で行を削除しても、値の重複は新たに生じないので、UNIQUE制約に違反しません。 2:× ('AA01', NULL)を追加しても、BがNULLの行は表Rに存在しないので重複は生じません。 そもそもNULLを含む組合せは重複とみなされません。 3:× (NULL, NULL)を追加しても、AとBがともにNULLの行は存在しないので重複は生じません。 4:○ A='AA01'の2行を'AA02'に更新すると、(AA01, BB01)の行が(AA02, BB01)になります。 これは既存の3行目(AA02, BB01)と重複するので、UNIQUE制約に違反します。 【ポイント】 主キー制約は一意かつNULL不可、UNIQUE制約は一意だがNULLを許容するという違いがよく問われます。 UPDATE文は複数行をまとめて変更するので、更新後の値の組合せが既存の行と重ならないかを確認します。まとめて解く
修了試験 2018-01-28実施分を通しで解く(80問)→