DBデータベーススペシャリスト試験 午前Ⅱ
平成22年度春期 データベーススペシャリスト 午前Ⅱ 問3
問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。
問題

選択肢
- アDELETE FROM R WHERE A = 'AA01' AND B = 'BB02'
- イINSERT INTO R VALUES ('AA01'、 NULL、 'DD01'、 'EE01')
- ウINSERT INTO R VALUES (NULL、 NULL、 'AA01'、 'BB02')
- エUPDATE R SET A = 'AA02' WHERE A = 'AA01'
解き方のヒントを見る
SQL抽出条件を読む観点
SQLの抽出条件と結果を対応づけるときは、条件が評価される対象の行や列、比較の単位、複数条件の結び付きに注目し、処理の順序を整理して各段階の結果を照合します。
この問題で問われていること
一つの確認観点として、WHERE句などの条件が各行に対してどのように評価されるかを整理してください。列の値、NULLや重複、AND・ORの組合せを区別し、結果集合との対応を丁寧に見ます。
視点
抽出結果を判断する際は、条件式をいきなり結論へ結びつけず、対象となるデータの単位を決め、各条件がどの値を参照し、条件同士がどう影響し合うかを順に整理します。特別な値や重複行の扱いも、一般的なSQLの読解では見落としやすい論点です。
確認ポイント
- 条件が参照する行と列を整理する
- 複数条件の組合せによる影響を確認する
- NULLや重複値の扱いを見落とさない
正解と解説を見る
正解
エ
解説
正答はエです。複合UNIQUE制約ではAとBの組合せが重複してはいけません。更新後に既存行と同じ組合せが生じるかを確認すると、制約違反となるSQL文を判定できます。
理由
表Rでは、AとBの組合せにUNIQUE制約があります。現在、AA01・BB01、AA01・BB02、AA02・BB01、AA02・BB03が存在します。エを実行すると、AがAA01の2行がAA02に変更され、そのうち一行が既存のAA02・BB01と重複します。
比較
DELETEは行を削除するため重複を発生させません。INSERT文のNULLは通常の値との等値重複として扱われず、既存の組合せと同一にはなりません。したがって、既存行との組合せ重複を生じさせるUPDATEだけが制約違反です。
選択肢ア
これは不正解だよ。DELETE FROM R WHERE A = 'AA01' AND B = 'BB02' は、条件に一致する既存行を削除するSQL文です。行の削除によってAとBの組合せが新たに作られることはないため、複合UNIQUE制約の重複違反は発生しません。
選択肢イ
これは不正解だよ。INSERT INTO R VALUES ('AA01', NULL, 'DD01', 'EE01') は、AにAA01、BにNULLを挿入します。UNIQUE制約の対象にNULLが含まれる場合、NULLは通常の具体的な値との重複として判定されないため、既存のAA01を含む行と直ちに同一組合せとはなりません。
選択肢ウ
これは不正解だよ。INSERT INTO R VALUES (NULL, NULL, 'AA01', 'BB02') は、UNIQUE制約の対象であるAとBがともにNULLです。NULLは値が未定であることを表し、既存行の具体的な値やNULLと等しいとは判定されないため、複合UNIQUE制約の違反にはなりません。
選択肢エ(正解)
これは正解だよ。UPDATE R SET A = 'AA02' WHERE A = 'AA01' は、AがAA01である2行をAA02へ変更します。その結果、もともと存在するAA02・BB01の行と、更新されたAA01・BB01の行が同じA・Bの組合せになり、複合UNIQUE制約に違反します。
学習のポイント
複合UNIQUE制約とNULLの重複判定、更新による衝突の見抜き方を学びます。
出典:独立行政法人 情報処理推進機構(IPA)平成22年度春期 データベーススペシャリスト試験 午前Ⅱ 問3(公式資料:問題冊子(PDF) / 解答例)
関連する過去問一覧
IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針