※ この記事にはアフィリエイトリンクが含まれます

PostgreSQLで複数のSELECT結果をまとめて取得する方法として、UNION ALLがあります。データの統合処理を行う際に便利なSQL構文の一つですが、同じような機能を持つUNIONとの違いを理解して使い分けることが重要です。
本記事では、UNION ALLの基本的な使い方から、UNIONとの違い、実用的な使用例、さらにはパフォーマンスの観点からの注意点まで詳しく解説します。PostgreSQLを活用する上で、効率的なデータ統合の方法を学びましょう!
これから本格的にプログラミングを学びたい方へ
もしあなたがSQLのスキルだけでなく、「正規表現だけじゃなく、もっと本格的にプログラミングを学びたい」と思っているなら、実務レベルでのスキルが身につく「RareTECH」という学習サービスがおすすめです。
なんくる本気でやってみたい。でも何から始めたらいいか分からない。そんなときこそ、信頼できる学習環境に頼っていいんです。一人で悩む時間を、実務レベルの力に変えられます!
少しでも気になった方は、まずは無料カウンセリングで話を聞いてみるのがおすすめです。
UNION ALLの基本的な使い方
UNION ALLは、複数のSELECTクエリの結果を結合し、一つの結果セットとして取得するために使用します。UNIONと異なり、重複するデータを削除せずにそのまま結合するのが特徴です。
SELECT 列1, 列2, ... FROM テーブルA
UNION ALL
SELECT 列1, 列2, ... FROM テーブルB;- 各
SELECT文のカラム数とデータ型は一致している必要があります。 UNION ALLではデータの重複を排除せず、そのまま結合されます。
簡単な使用例
例えば、下記のようなsales_2023とsales_2024という2つのテーブルがあり、それぞれの年間売上データを結合して取得したい場合、以下のように記述します。
sales_2023
| id | product_name | sales_amount |
|---|---|---|
| 1 | 商品A | 1000 |
| 2 | 商品B | 1500 |
| 3 | 商品C | 2000 |
sales_2024 テーブル
| id | product_name | sales_amount |
|---|---|---|
| 1 | 商品A | 1100 |
| 2 | 商品B | 1400 |
| 4 | 商品D | 1800 |
SELECT id, product_name, sales_amount FROM sales_2023
UNION ALL
SELECT id, product_name, sales_amount FROM sales_2024;結合結果 (UNION ALL の実行結果)
| id | product_name | sales_amount |
|---|---|---|
| 1 | 商品A | 1000 |
| 2 | 商品B | 1500 |
| 3 | 商品C | 2000 |
| 1 | 商品A | 1100 |
| 2 | 商品B | 1400 |
| 4 | 商品D | 1800 |
このように、重複を排除せず、両テーブルのデータがすべて表示されます。
次に、UNIONを使用した場合との違いを詳しく見ていきましょう!
UNIONとの違い
UNION ALLとUNIONはどちらも複数のSELECT結果を結合するためのSQL構文ですが、大きな違いとして「重複するデータの扱い方」があります。
UNIONの特徴
UNIONは重複する行を自動的に削除し、一意のデータのみを出力します。- そのため、データの重複を取り除きたい場合に適しています。
DISTINCTを適用するため、処理が重くなりがちです。
UNION ALLの特徴
UNION ALLは重複をそのまま保持した状態でデータを結合します。UNIONのように重複を削除する処理がないため、パフォーマンスが向上します。- 重複の有無を考慮せず、すべてのデータをそのまま取得したい場合に便利です。
UNIONとUNION ALLの比較
使用例: UNION を使用した場合
SELECT id, product_name, sales_amount FROM sales_2023
UNION
SELECT id, product_name, sales_amount FROM sales_2024;実行結果 (UNION の場合)
| id | product_name | sales_amount |
|---|---|---|
| 1 | 商品A | 1000 |
| 2 | 商品B | 1500 |
| 3 | 商品C | 2000 |
| 1 | 商品A | 1100 |
| 2 | 商品B | 1400 |
| 4 | 商品D | 1800 |
この結果は一見UNION ALLと同じように見えますが、実際に重複する行がある場合、UNIONはそれらを削除します。
使用例: UNION ALL を使用した場合
SELECT id, product_name, sales_amount FROM sales_2023
UNION ALL
SELECT id, product_name, sales_amount FROM sales_2024;実行結果 (UNION ALL の場合)
| id | product_name | sales_amount |
|---|---|---|
| 1 | 商品A | 1000 |
| 2 | 商品B | 1500 |
| 3 | 商品C | 2000 |
| 1 | 商品A | 1100 |
| 2 | 商品B | 1400 |
| 4 | 商品D | 1800 |
このように、UNION ALLでは重複データをそのまま取得できるため、すべての行を確認したい場合に適しています。
まとめ
この記事では、PostgreSQLのUNION ALLについて解説しました。最後に重要なポイントを振り返りましょう。
✅ UNION ALLの特徴
- 複数の
SELECT結果をそのまま結合できる。 UNIONとは異なり、重複を削除しない。- 余計な処理がないため、パフォーマンスが向上する。
✅ UNIONとの違い
UNIONは重複を排除するため、データをユニークにしたい場合に有効。UNION ALLはすべてのデータを取得でき、データの正確なカウントやログ分析に適している。
✅ 適切な使い分け
- 重複を削除する必要がある場合 →
UNION - 重複を気にせずデータを統合したい場合 →
UNION ALL
PostgreSQLでのデータ統合の際に、UNIONとUNION ALLを適切に使い分けることで、効率的なクエリ設計が可能になります。
シナリオに応じて最適な方法を選び、パフォーマンスを最大限に活かしましょう!
PostgreSQLは、現場でも広く使われている信頼性の高いデータベースです。もしこれから本格的に学び、実務で通用する力をつけたい方には、RareTECHをチェックしてみてください。実案件ベースのカリキュラムで、あなたのスキルを次のステージへ引き上げてくれるはずです。





「本当にエンジニアとしてやっていけるか不安…」という方も、実践的な開発に関わることで、転職後の働き方を事前に体感できますよ。
実務で使えるDBスキルとともに、プログラミングスキルをちゃんと身につけたいなら、
RareTECHの無料カウンセリングで、学ぶ目的やゴールをプロと一緒に明確にしてみましょう。独学では得られない「実践的な成長の道筋」が見えてきます。


もしこの内容を通して、PostgreSQLについてさらに理解を深めたいと感じられたなら、信頼できる講座や書籍を紹介した別記事をご覧いただくのも良いかと思います。ご自身の学びに、きっとお役立ていただけるはずです。










コメント