UNION vs UNION ALL
CoddyのSQLジャーニー「応用」セクションの一部 — レッスン 16/27。
UNIONについては、Fundamentalsで学習しました。これは2つの結果セットを上下に積み重ねるものです。デフォルトでは重複の削除も行われますが、これには追加のソート(並べ替え)コストがかかります。
SELECT name FROM authors
UNION
SELECT name FROM editorsUNION ALL は同様の積み上げを行いますが、重複を保持します。これはより高速であり、2つの側が同じ行を生成しないことがわかっている場合や、各出現回数を実際にカウントしたい場合に、ほとんどの場合で求められる動作です。
SELECT name FROM authors
UNION ALL
SELECT name FROM editors両側は、同じ列数を同じ順序で、かつ互換性のある型で返す必要があります。
チャレンジ
簡単利用可能なテーブルとカラム:
<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_noamount: 注文の合計(amountまたはtotalから)
すべての行を保持してください(重複削除は不要)。amount の降順で並べ替えてください。
チートシート
UNION は2つの結果セットを積み重ね、重複を削除します(低速)。UNION ALL は積み重ねて重複を保持します(高速):
SELECT name FROM authors
UNION ALL
SELECT name FROM editors両方の側で、列の数が同じであり、順序が一致し、型に互換性がある必要があります。列名は最初の SELECT から取得されます。
自分で試してみよう
-- UNION ALL で結合された、同じ3つの列に揃えられた2つの SELECT 文
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。