UNIONとUNION ALLの違い
重複除去とパフォーマンスの違い、そして通常はUNION ALLが意図される理由を学びます。
「UNIONとUNION ALLの違い」はCoddyKit上の無料SQL Interview Prepレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Interview Prep学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Interview Prepコースには全4レッスンが含まれています。
面接官がUNIONについて尋ねる理由
集合演算は、1つの結果セットをもう1つの結果セットの下に縦方向に積み重ねます。UNIONとUNION ALLは、面接官が最初に取り上げる集合演算子です。両者の違いは一言で答えられますが、コストを理解しているかどうかが表れます。
質問はほぼ必ず次のような形です。「UNIONとUNION ALLの違いは何ですか。どちらを使うべきですか。」優れた回答では、重複排除、順序、パフォーマンスについてまとめて説明します。
UNIONの動作
UNIONは2つのクエリの行を1つの結果セットにまとめ、その後重複する行を削除します。2つの行が重複とみなされるのは、すべての列が一致する場合だけです。
重複を削除するには、エンジンが結合されたすべての行をソートまたはハッシュ化する必要があり、実際に処理コストがかかります。UNIONは数学的な意味での集合を返すため、同じ行は繰り返されません。
SELECT city FROM customers
UNION
SELECT city FROM suppliers;UNION ALLの動作
UNION ALLは2つの結果セットを連結し、重複を含むすべての行を保持します。重複排除を行わないため、その目的でのソートやハッシュ化も行いません。
重複排除の手順を省くため、UNION ALLはほぼ常に高速です。行が重複しないとわかっている場合や、重複をそのまま必要とする場合に正しい選択です。
SELECT city FROM customers
UNION ALL
SELECT city FROM suppliers;パフォーマンスの違い
面接での要点は、UNION ALLの方が低コストだということです。重複排除を行わないためです。UNIONでは、重複を削除するために結合された行を比較する必要があります。
UNION= UNION ALL + 暗黙的なDISTINCT処理。- 大きな結果セットでは、このDISTINCT処理がクエリコストの大部分を占めることがあります。
重複を削除する必要がないなら、UNIONを選ぶのはCPUとメモリの無駄です。
重複を含む実例
両方のクエリが'Paris'という行を返す可能性があるとします。UNIONではParisが1つになります。UNION ALLではParisが2つになります。
面接官は、行数を予測させる質問を好みます。まず連結直後の結果を思い浮かべ、その後で「この演算子は重複を取り除くか」と考えてください。
-- customers.city: Paris, Lyon
-- suppliers.city: Paris, Nice
-- UNION -> Paris, Lyon, Nice (3 rows)
-- UNION ALL -> Paris, Lyon, Paris, Nice (4 rows)重複はすべての列を対象に定義される
よくある落とし穴は、選択したすべての列が等しい場合にのみ、2つの行が重複とみなされることです。異なる列を1つ追加すると、行は重複ではなくなるため、UNIONは両方を保持します。
同じテーブルに対するUNIONでも、SELECT cityよりSELECT id, cityの方が多くの行を返すことがあるのは、このためです。
SELECT id, city FROM customers
UNION
SELECT id, city FROM suppliers;
-- ids differ -> few or no duplicates removed結合後の結果を並べ替える
個々の分岐にORDER BYを置くことはできません。ORDER BYは結合後の結果全体に適用され、最後に1回だけ記述する必要があります。
面接官からORDER BYをどこに置くか尋ねられたら、答えは「最後のクエリの後に1つだけ置き、出力列を名前または位置で参照する」です。
SELECT city FROM customers
UNION ALL
SELECT city FROM suppliers
ORDER BY city;列名は最初のクエリから決まる
最後の ORDER BY で列を参照するときは、最初の SELECT の名前(またはエイリアス)を使用します。2つ目のクエリの列名は、出力時のラベル付けには使用されません。
これは、各分岐で列名が異なる場合に重要です。最初の分岐にエイリアスを付けて、出力ヘッダーを制御します。
SELECT city AS location FROM customers
UNION ALL
SELECT town FROM suppliers
ORDER BY location;UNIONを使うべき場合
UNION は、行が重複する可能性が実際にあり、それぞれの異なる行を1回ずつ取得したい場合に限り使用します。たとえば、同じ人物が両方に含まれる可能性のある2つの連絡先リストを統合する場合や、複数のソースから重複のない値の一覧を作成する場合です。
ソースが互いに重ならないと保証できるなら、UNION ALLを使うと同じ結果をより高速に得られます。
SELECT email FROM web_signups
UNION
SELECT email FROM store_signups;
-- one row per distinct email across bothUNION ALLを使うべき場合
重複が発生しない場合、重複に意味がある場合、または後で集計する場合は、UNION ALL を使用します。典型的な例は、互いに行が重複しない月別パーティションテーブルを積み重ねる処理です。
面接でのポイント:UNION ALLがデフォルトであり、重複排除が実際に必要な場合にのみUNIONを選ぶ、と説明してください。
SELECT * FROM sales_2023
UNION ALL
SELECT * FROM sales_2024;まとめ
洗練された面接の回答は、次のようになります。「UNIONは重複行を削除するため、ソートまたはハッシュ処理が必要になり、UNION ALLより遅くなります。どちらも列数の一致と互換性のあるデータ型を必要とし、ORDER BYは最後に1回だけ指定します。重複排除が必要でない限り、デフォルトではUNION ALLを使用します。」
この一文だけで、正確性とパフォーマンスへの理解を同時に示せます。
クイックチェック
UNIONとUNION ALLの違いを理解できているか確認します。
復習
重要なポイント:
UNION= 結合して重複行を削除(暗黙のDISTINCT、追加コスト)。UNION ALL= すべてを保持したまま結合する、より高速で妥当なデフォルト。- 重複とみなすにはすべての列が一致する必要があります。
ORDER BYは最後に1回だけ指定し、最初のクエリの列名を使用します。
デフォルトではUNION ALLを使用し、重複排除が本当に必要な場合にのみUNIONを選びます。
よくある質問
「UNIONとUNION ALLの違い」レッスンは無料ですか?
はい。「UNIONとUNION ALLの違い」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Interview Prepコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Interview Prepコースには全4レッスンが含まれています。
「UNIONとUNION ALLの違い」で何を学びますか?
重複除去とパフォーマンスの違い、そして通常はUNION ALLが意図される理由を学びます。 ブラウザで直接実行するハンズオンコードでSQL Interview Prepを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
SQL Interview Prepを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSQL Interview Prepは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「UNIONとUNION ALLの違い」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSQL Interview Prepレッスンでコードを書いて実行できますか?
はい。すべてのSQL Interview Prepレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- UNIONとUNION ALLの違い
- 列数とデータ型の互換性
- 比較に使うINTERSECTとEXCEPT
- JOINで集合演算を再現する