ホーム > データベーススペシャリスト試験 > 2022年
データベーススペシャリスト試験 2022年 午前2 問09
SQL文1とSQL文2を実行した結果が同一になるために, 表Rが満たすべき必要十分な条件はどれか。
〔SQL文1〕
SELECT * FROM R UNION SELECT * FROM R
〔SQL文2〕
SELECT * FROM R
ア:値にNULLをもつ行は存在しない。
イ:行数が0である。
ウ:重複する行は存在しない。(正解)
エ:列数が1である。
解説
SQL文1とSQL文2を実行した結果が同一になるための条件【午前2 解説】
要点まとめ
- 結論:SQL文1とSQL文2の結果が同じになるには、表Rに重複行が存在しないことが必要です。
- 根拠:
UNION
は重複行を排除して結果を返すため、重複行がなければUNION
の効果はなくなります。 - 差がつくポイント:
UNION
の動作理解と重複行の有無が結果に与える影響を正確に把握することが重要です。
正解の理由
SQL文1は「
したがって、選択肢の中で「重複する行は存在しない。」が正解となります。
SELECT * FROM R UNION SELECT * FROM R
」であり、表Rの全行を2回取得し、重複を排除して結果を返します。一方、SQL文2は単純に「SELECT * FROM R
」で表Rの全行を返します。UNION
は重複行を1つにまとめるため、表Rに重複行がなければ、2回取得しても結果は変わりません。つまり、重複行が存在しないことが必要十分条件です。したがって、選択肢の中で「重複する行は存在しない。」が正解となります。
よくある誤解
UNION
は単に行数を増やすだけと思い込み、重複排除の効果を見落とすことがあります。また、NULLの有無や列数は
UNION
の結果に直接影響しません。解法ステップ
- SQL文1の動作を理解する:
UNION
は重複行を排除する集合演算である。 - SQL文2は単純に表Rの全行を返すことを確認する。
- 両者の結果が同じになる条件を考える。
- 重複行がなければ、
UNION
の重複排除効果は無意味となり、結果は同じになる。 - よって、表Rに重複行が存在しないことが必要十分条件と判断する。
選択肢別の誤答解説
- ア: 「値にNULLをもつ行は存在しない。」
NULLの有無はUNION
の重複排除に影響しません。NULLを含む行も重複判定の対象です。 - イ: 「行数が0である。」
行数が0なら確かに結果は同じですが、これは必要十分条件ではなく特殊ケースです。 - ウ: 「重複する行は存在しない。」
重複行がなければUNION
の重複排除効果はなく、結果は同一になります。正解です。 - エ: 「列数が1である。」
列数はUNION
の結果に影響しません。複数列でも重複排除は行われます。
補足コラム
SQLの
一方、
重複行の有無を理解することは、SQLのパフォーマンス最適化や正確なデータ取得に役立ちます。
UNION
は集合演算の一つで、複数のSELECT文の結果を結合し、重複行を排除して返します。一方、
UNION ALL
は重複排除を行わず、すべての行を返します。重複行の有無を理解することは、SQLのパフォーマンス最適化や正確なデータ取得に役立ちます。
FAQ
Q:
A:
UNION
とUNION ALL
の違いは何ですか?A:
UNION
は重複行を排除して結果を返しますが、UNION ALL
は重複を排除せず全行を返します。Q: NULLを含む行は重複判定でどう扱われますか?
A: NULLは他のNULLと等しいとは限らず、DBMSによって扱いが異なりますが、多くの場合はNULL同士も重複とみなされます。
A: NULLは他のNULLと等しいとは限らず、DBMSによって扱いが異なりますが、多くの場合はNULL同士も重複とみなされます。
関連キーワード: SQL, UNION, 重複排除, 集合演算, SELECT文, データベース, NULL, 重複行