無限ノック › DEA 練習問題一覧 › 問題
DEAデータオペレーションとサポート

2つのテーブル「current_customers」と「past_customers」があります。両方のテーブルのスキーマは同一です。データエンジニアは、現在のアクティブな顧客(current_customers)のうち、過去の顧客リスト(past_customers)には存在しない顧客のレコードのみを抽出するクエリを作成する必要があります。標準的なSQLにおいて、この目的を達成するために使用すべき集合演算子はどれですか。

A
UNION ALL演算子を使用して、両方のテーブルのすべてのレコードを重複を含めて縦に結合する
UNION ALL演算子は、2つのテーブルからすべての行を(重複を含めて)縦に結合して単一のデータセットにするために使用されますが、今回の目的である「一方に存在し、もう一方には存在しないレコードの差分抽出」を実行することはできません。
B
INTERSECT演算子を使用して、両方のテーブルに共通して存在するレコードのみを抽出する
INTERSECT演算子は、2つのテーブルの両方に共通して存在しているレコードのみを抽出する際に使用します。アクティブ顧客と過去顧客のリストの両方に重複して存在する顧客を見つける場合には役立ちますが、今回の差分抽出の要件には合致しません。
C
EXCEPT(またはMINUS)演算子を使用して、最初のクエリ結果から二番目の結果を除外する
✓ 正解
EXCEPT(一部のデータベースシステムではMINUS)演算子は、左側のクエリ(current_customers)の結果から、右側のクエリ(past_customers)の結果に一致する行を除外した差分のみを抽出するため、今回の要件に完全に合致します。
D
CROSS JOIN演算子を使用して、両方のテーブルのすべての組み合わせから一致しないものを探す
CROSS JOIN演算子は、2つのテーブルのすべての行のデカルト積(すべての組み合わせ)を生成する結合方式であり、条件に基づいた差分抽出や特定の集合演算を行うための構文ではないため、このユースケースで使用すると膨大な無意味なデータが生成されます。

解説

標準的なSQLにおいて、2つの結果セットの差分を求める(一方のデータセットに存在し、もう一方のデータセットには存在しない行を取得する)には「EXCEPT」演算子(データベース製品によっては「MINUS」演算子)を使用します。これにより、「current_customers」から「past_customers」に一致する行を引いた差分のみを取得できます。UNION ALLは2つのテーブルの行をすべて結合するため、差分抽出の用途には適していません。INTERSECTは両方のデータセットに共通するレコードのみを抽出します。CROSS JOINは2つのテーブルの全ての行の組み合わせ(デカルト積)を返すため、単純な差分の確認には全く不適切です。

ドメイン別正答率・予想スコアでリアルタイムに実力把握

無限ノックでDEAを徹底対策。全問AI生成のオリジナル問題。

無料で演習を始める →
← DEA の問題一覧に戻る