Menu
Coddy logo textTech

UNION vs UNION ALL

CoddyのSQLジャーニー「応用」セクションの一部 — レッスン 16/27。

UNIONについては、Fundamentalsで学習しました。これは2つの結果セットを上下に積み重ねるものです。デフォルトでは重複の削除も行われますが、これには追加のソート(並べ替え)コストがかかります。

SELECT name FROM authors
UNION
SELECT name FROM editors

UNION ALL は同様の積み上げを行いますが、重複を保持します。これはより高速であり、2つの側が同じ行を生成しないことがわかっている場合や、各出現回数を実際にカウントしたい場合に、ほとんどの場合で求められる動作です。

SELECT name FROM authors
UNION ALL
SELECT name FROM editors

両側は、同じ列数を同じ順序で、かつ互換性のある型で返す必要があります。

challenge icon

チャレンジ

簡単

利用可能なテーブルとカラム:

  • <strong>online_orders</strong>: <strong>order_no</strong>, <strong>amount</strong>
  • <strong>retail_orders</strong>: <strong>ticket_no</strong>, <strong>total</strong>

これら2つのテーブルは、異なるカラム名で異なるチャネルからの注文を追跡しています。すべての注文をまとめた1つのリストを、以下のカラムで返してください:

  • channel: 'online' または 'retail'
  • order_id: オンラインの order_no、リテールの ticket_no
  • amount: 注文の合計(amount または total から)

すべての行を保持してください(重複削除は不要)。amount の降順で並べ替えてください。

チートシート

UNION は2つの結果セットを積み重ね、重複を削除します(低速)。UNION ALL は積み重ねて重複を保持します(高速):

SELECT name FROM authors
UNION ALL
SELECT name FROM editors

両方の側で、列の数が同じであり、順序が一致し、型に互換性がある必要があります。列名は最初の SELECT から取得されます。

自分で試してみよう

-- UNION ALL で結合された、同じ3つの列に揃えられた2つの SELECT 文
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

応用のすべてのレッスン