PostgreSQL Union、Union ALL の例

⚡ スマートサマリー

PostgreSQL UNIONは、2つ以上のSELECT文の結果を1つの結果セットに結合し、重複する行を削除します。一方、UNION ALLはすべての行を保持するため、重複が問題にならない場合にはより高速なオプションとなります。

  • 🔗 組み合わせる: UNIONは、複数のSELECT文からの行を1つの結果セットに結合します。
  • 🧹 重複: UNIONは重複する行を削除しますが、UNION ALLは一致するすべての行を保持します。
  • 📐 ルール: 各SELECT文は、互換性のあるデータ型を持つ同じ数の列を返す必要があります。
  • ↕️ 注文者: 最後にORDER BY句を1つ追加することで、結合された結果セットをソートできます。
  • パフォーマンス: UNION ALLは重複削除のステップを省略するため、処理速度が速くなります。
  • 🤖 AIヘルプ: AIアシスタントが列を整列させ、UNIONとUNION ALLのどちらかを選択します。

PostgreSQL ユニオンとユニオンオール

何ですか PostgreSQL 連合?

その PostgreSQL UNION 演算子は、複数の SELECT ステートメントの結果セットを 1 つの結果セットに結合するために使用されます。SELECT ステートメントの結果の重複行は削除されます。UNION 演算子は、次の 2 つの条件下で機能します。

  • SELECTクエリは、同じ数の列を返す必要があります。
  • 対応するすべての列のデータ型には互換性がある必要があります。

UNION 演算子は通常、完全に正規化されていない関連テーブルのデータを結合するために使用されます。

構文

SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)]
UNION
SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)];

上記のパラメータの説明は次のとおりです。

expression_1、expression_2、…expression_n は、取得する必要がある計算または列です。

テーブルは、レコードを取得する必要があるテーブルです。

WHERE 条件は、レコードを取得するために満たさなければならない条件です。

注意: UNION演算子は重複を返さないため、UNION DISTINCTを使用しても結果に影響はありません。

PostgreSQL Union

UNION演算子は重複を削除します。 SELECT DISTINCT そうです。では、これを実演してみましょう。Demoという名前のデータベースがあり、以下のテーブルが含まれています。

本:

PostgreSQL Union

価格:

PostgreSQL Union

次のコマンドを実行してみましょう。

SELECT id
FROM Book
UNION
SELECT id
FROM Price;

コマンドは以下を返します。

PostgreSQL Union

id 列は、Book テーブルと Price テーブルの両方に表示されます。 ただし、結果には XNUMX 回しか表示されません。 その理由は、 PostgreSQL UNION演算子は重複を返しません。

PostgreSQL ユニオンオール

この演算子は、重複を削除せずに、複数の SELECT ステートメントの結果セットを結合します。この演算子では、各 SELECT ステートメントに、同様のデータ型の結果セット内のフィールド数が同数である必要があります。

構文:

SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)]
UNION ALL
SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)];

上記のパラメータの説明は次のとおりです。

expression_1、expression_2、…expression_n は、取得する必要がある計算または列です。

テーブルは、レコードを取得する必要があるテーブルです。

WHERE 条件は、レコードを取得するために満たさなければならない条件です。

注意: 両方のSELECT文は、同じ数の式を持つ必要があります。

次の表を使用します。

本:

PostgreSQL ユニオンオール

価格:

PostgreSQL ユニオンオール

次のコマンドを実行します。

SELECT id
FROM Book
UNION ALL
SELECT id
FROM price;

次のような結果が返されます。

PostgreSQL ユニオンオール

重複は削除されていません。

ORDER BY

その PostgreSQL UNION 演算子は、ORDER BY 句と一緒に使用して、クエリ結果を順序付けることができます。これを説明するには、次のテーブルを使用します。

価格:

ORDER BY

価格2:

ORDER BY

UNION 演算子を ORDER BY 句と組み合わせて使用​​する方法を示すコマンドを次に示します。

SELECT *
FROM Price
UNION
SELECT *
FROM Price2
ORDER BY price;

コマンドは以下を返します。

ORDER BY

レコードは価格列によって並べられました。 この句は、デフォルトでレコードを昇順に並べます。 降順に並べ替えるには、以下に示すように DESC 句を追加します。

SELECT *
FROM Price
UNION
SELECT *
FROM Price2
ORDER BY price DESC;

コマンドは以下を返します。

ORDER BY

レコードは、価格列に基づいて降順に並べられています。

UnionとUnion Allはそれぞれいつ使うべきか?

UNION演算子は、構造が似ているものの何らかの理由で分割された複数のテーブルがある場合に使用します。重複レコードを削除または排除する必要がある場合に便利です。

重複レコードを削除または排除する必要がない場合は、UNION ALL演算子を使用してください。

pgAdminの使用

それでは、pgAdminを使ってこれら3つの操作を実行する方法を見ていきましょう。

使い方 PostgreSQL pgAdminを使用したユニオン

以下は、使用方法に関する手順です。 PostgreSQL pgAdmin を介した UNION:

ステップ1) pgAdmin アカウントにログインします。

ステップ2) 左側のナビゲーションバーから「データベース」をクリックし、次に「デモ」をクリックします。

  PostgreSQL pgAdminを使用したユニオン

ステップ3) クエリ エディターにクエリを入力します。

SELECT *
FROM Price
UNION
SELECT *
FROM Price2
ORDER BY price DESC;

ステップ4) 「実行」ボタンをクリックします。

  PostgreSQL pgAdminを使用したユニオン

次のような結果が返されます。

  PostgreSQL pgAdminを使用したユニオン

ユニオンオール

ステップ1) pgAdmin アカウントにログインします。

ステップ2) 左側のナビゲーションバーから「データベース」をクリックし、次に「デモ」をクリックします。

  PostgreSQL pgAdmin を使用したすべてのユニオン

ステップ3) クエリ エディターにクエリを入力します。

SELECT id
FROM Book
UNION ALL
SELECT id
FROM price;

ステップ4) 「実行」ボタンをクリックします。

  PostgreSQL pgAdmin を使用したすべてのユニオン

次のような結果が返されます。

  PostgreSQL pgAdmin を使用したすべてのユニオン

ORDER BY

UNION ALL 演算子を ORDER BY 句と組み合わせて、結果セット内の結果を順序付けることができます。例:

SELECT id
FROM Book
UNION ALL
SELECT id
FROM price
ORDER BY id;

コマンドは以下を返します。

  PostgreSQL pgAdminを使用して注文する

結果は注文されました。

このチュートリアルで使用するデータベースをダウンロードする

よくあるご質問

UNION ALLは単純に行を連結するため、処理速度が速くなります。UNIONは重複を削除するために結合された行をソートまたはハッシュ化する必要があり、その分処理負荷が増加します。重複が問題にならない場合は、UNION ALLの方が効率的です。

はい。UNION内のすべてのSELECTは同じ数の列を返す必要があり、一致する列は同じ順序で互換性のあるデータ型を持つ必要があります。そうでない場合 PostgreSQL エラーが発生し、クエリが失敗します。

はい。UNION句は列名ではなく位置に基づいて列を照合するため、列名が異なっていても問題ありません。ただし、データ型は互換性がある必要があり、結果セットには最初のSELECT文の列名が使用されます。

UNIONは、2つの結果セットの行を縦方向に積み重ねて1つの列リストにし、重複を削除します。JOINは、関連するキーに基づいて異なるテーブルの列を横方向に結合するため、行を追加するのではなく、行の幅を広げます。

ORDER BY は最終的な結合結果をソートするので、 PostgreSQL 最後の SELECT の後に ORDER BY を 1 つだけ配置できます。個々のクエリを最初にソートしても、それらの行が結合された後には意味がありません。

GitHub CopilotのようなAIアシスタントは、各SELECT文の列リストを整列させ、不一致のデータ型を指摘し、重複を保持するかどうかに基づいてUNIONまたはUNION ALLを推奨することで、一般的なクエリエラーを削減します。

はい。AIアシスタントは、テーブルと目的を分析することで、重複行が存在する可能性と意味を判断し、重複が許容される場合は処理速度向上のためにUNION ALLを、重複を削除する必要がある場合はUNIONを提案します。

UNIONは、どちらかのクエリで見つかった行を返します。INTERSECTは、両方のクエリに存在する行のみを返し、EXCEPTは、最初のクエリには存在するが2番目のクエリには存在しない行を返します。これら3つはすべて、デフォルトで重複を削除します。