DBデータベーススペシャリスト試験 午前Ⅱ

令和4年度秋期 データベーススペシャリスト 午前Ⅱ 問9

問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。

問題

SQL文1とSQL文2を実行した結果が同一になるために,表Rが満たすべき必要十分な条件はどれか。 〔SQL文1〕 SELECT * FROM R UNION SELECT * FROM R 〔SQL文2〕 SELECT * FROM R

選択肢

  1. ア
    値にNULLをもつ行は存在しない。
  2. イ
    行数が0である。
  3. ウ
    重複する行は存在しない。
  4. エ
    列数が1である。
解き方のヒントを見る

SQL抽出条件を読み解く視点

SQLの抽出条件と結果を対応づけるときは、条件が評価される対象の範囲と、行同士の関係を切り分けて整理しましょう。各条件の役割を個別に確認し、全体への影響を考えることが重要です。

この問題で問われていること

今回の確認では、抽出条件がどの行や列の情報を参照し、複数の条件が組み合わさったときに結果の集合へどのような観点で影響するかを、処理の順序と対象範囲に分けて整理してください。

視点

条件式を読む際は、対象となるデータの単位、参照している属性、条件が適用される段階を分けて記録すると、結果との対応を落ち着いて検討できます。

確認ポイント

  • 条件ごとに、参照対象が行・列・グループのどれに関わるかを整理する
  • 複数条件の組合せが、対象範囲の広さにどう影響するかを言葉で確認する
  • 期待する結果を決めつけず、条件と結果の対応を一つずつ照合する
正解と解説を見る

正解

ウ

解説

SQL文1は同じSELECT結果をUNIONで結合し、SQL文2は表Rをそのまま取得する。UNIONでは重複する行が除かれるため、両者が常に同一になるには、表Rに重複行が存在しないことが必要十分です。

理由

SQL文1では、表Rの検索結果と同じ検索結果をUNIONで結合する。UNIONは重複行を一つにまとめるため、表Rに重複行がなければSQL文1はSQL文2と同じ結果になる。逆に重複行があれば、SQL文2には重複が残る一方、SQL文1では除かれる。

比較

NULLを含む行の有無や列数は、同じ行が重複しているかどうかを直接決めない。行数0は両方の結果が一致する一例にすぎず、表Rが空でない場合にも一致し得るため、必要条件ではありません。

選択肢ア

これは不正解だよ。NULLをもつ行が存在しなくても、NULLを含まない同一内容の行が複数あれば、UNIONによる重複排除の影響を受ける。逆にNULLを含む行があっても、重複行がなければ二つの結果は一致するため、必要十分な条件ではない。

選択肢イ

これは不正解だよ。行数が0なら、どちらのSQL文も空の結果になるので一致する。しかし、表Rに行が存在していても重複がなければ結果は一致する。したがって、行数0は一致するための十分条件になり得るが、必要条件ではない。

選択肢ウ(正解)

これは正解だよ。SQL文1は同じ結果をUNIONで結合するため、重複する行があれば一つにまとめられる。SQL文2は表Rの行をそのまま返すので、重複行が存在しない場合に限って両方の結果が同一になり、必要十分な条件となる。

選択肢エ

これは不正解だよ。列数が1であるかどうかは、UNIONが重複行をどのように扱うかとは無関係である。列数が1でも重複行があれば結果は異なり、列数が複数でも重複行がなければ結果は一致するため、必要十分な条件ではない。

学習のポイント

UNIONの重複排除と、必要十分条件の考え方を学ぶ。

出典:独立行政法人 情報処理推進機構(IPA)令和4年度秋期 データベーススペシャリスト試験 午前Ⅱ 問9(公式資料:問題冊子(PDF) / 解答例)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針