複数のSELECT結果をどうやってくっつける?
SQLで複数のテーブルやクエリから得られた結果を、縦方向に結合したい場面があります。例えば、「東京支店の従業員リスト」と「大阪支店の従業員リスト」を一つにまとめたい、といったケースです。
そんなときに活躍するのが UNION
と UNION ALL
です。どちらも結果セットを結合する機能を持っていますが、重要な違いがあります。しっかり理解して使い分けられるようになりましょう!✨
UNION: 重複を除いて結合する
UNION
は、複数の SELECT
文の結果セットを結合し、重複する行を自動的に削除してくれます。
例えば、`支店Aの顧客リスト` と `支店Bの顧客リスト` があり、両方に登録されている顧客がいた場合、UNION
で結合すると、その顧客情報は1行だけ表示されます。
基本的な構文
SELECT カラム1, カラム2 FROM テーブル1
UNION
SELECT カラム1, カラム2 FROM テーブル2;
具体例
以下の2つのテーブルがあるとします。
テーブルA (tokyo_customers)
customer_id | name |
---|---|
1 | 田中 |
2 | 佐藤 |
3 | 鈴木 |
テーブルB (osaka_customers)
customer_id | name |
---|---|
2 | 佐藤 |
4 | 高橋 |
5 | 伊藤 |
UNION
を使って結合してみましょう。
SELECT customer_id, name FROM tokyo_customers
UNION
SELECT customer_id, name FROM osaka_customers;
実行結果
customer_id | name |
---|---|
1 | 田中 |
2 | 佐藤 |
3 | 鈴木 |
4 | 高橋 |
5 | 伊藤 |
結果を見ると、`customer_id` が 2 の「佐藤」さんは両方のテーブルに存在しましたが、結果セットでは1行にまとめられていますね。これが UNION
の特徴です。
UNION
で結合する SELECT
文は、カラムの数と、対応するカラムのデータ型が一致している必要があります。UNION ALL: 全てをそのまま結合する
UNION ALL
は、UNION
と同様に複数の SELECT
文の結果セットを結合しますが、重複する行もそのまま含めて表示します。
先ほどの例で UNION ALL
を使うと、「佐藤」さんの情報は2回表示されることになります。
基本的な構文
SELECT カラム1, カラム2 FROM テーブル1
UNION ALL
SELECT カラム1, カラム2 FROM テーブル2;
具体例
先ほどと同じテーブルを使って UNION ALL
で結合してみましょう。
SELECT customer_id, name FROM tokyo_customers
UNION ALL
SELECT customer_id, name FROM osaka_customers;
実行結果
customer_id | name |
---|---|
1 | 田中 |
2 | 佐藤 |
3 | 鈴木 |
2 | 佐藤 |
4 | 高橋 |
5 | 伊藤 |
UNION ALL
の結果では、「佐藤」さんの情報が重複して表示されているのがわかりますね。
UNION
と同様に、結合する SELECT
文は、カラムの数と対応するカラムのデータ型が一致している必要があります。UNION と UNION ALL の比較と使い分け
ここまでの説明で、UNION
と UNION ALL
の主な違いは「重複行の扱い」であることがわかりましたね。それぞれの特徴をまとめてみましょう。
機能 | UNION | UNION ALL |
---|---|---|
重複行の扱い | 削除する | 削除しない (そのまま結合) |
処理速度 | 遅い傾向 (重複チェックのため) | 速い傾向 |
結果の順序 | 保証されない (暗黙のソートが入る場合がある) | 保証されない (基本的に元の順序で結合されることが多い) |
パフォーマンスについて 🚀
UNION
は重複行を削除するために、内部的にソートなどの処理を行う場合があります。そのため、一般的に UNION ALL
よりも処理速度が遅くなる傾向があります。
もし、結合するデータに重複がないことが分かっている場合や、重複があっても問題ない場合は、UNION ALL
を使う方がパフォーマンス上有利です。
どちらを使うべきか? 🤔
- 重複した結果を除外したい場合 👉
UNION
- 重複を含めたすべての結果が必要な場合 👉
UNION ALL
- パフォーマンスを重視する場合 (重複がない、または重複しても良い場合) 👉
UNION ALL
目的に応じて適切な方を選びましょう!
ORDER BY
句を追加する必要があります。まとめ 🎉
今回は、複数の SELECT
文の結果を結合する UNION
と UNION ALL
について学びました。
UNION
: 結果を結合し、重複行を削除する。UNION ALL
: 結果を結合し、重複行もそのまま含める。一般的にUNION
より高速。- どちらも結合する
SELECT
文のカラム数とデータ型を一致させる必要がある。
これらの違いを理解し、状況に応じて使い分けることで、より効率的で意図した通りのデータ抽出が可能になります。
これで Step 4 は完了です!お疲れ様でした☕ 次のステップでは、データ定義言語(DDL)について学んでいきましょう!
コメント