問い合わせの結合

PostgreSQL 9.1.1文書
前のページ | 巻戻し | 第 7章問い合わせ | 早送り | 次のページ

# 7.4. 問い合わせの結合

2つの問い合わせの結果は、和、積、差の集合演算を使って結合することができます。 構文は以下の通りです。

    query1 UNION [ALL] query2
    query1 INTERSECT [ALL] query2
    query1 EXCEPT [ALL] query2

`query1`と`query2`は、これまで説明した機能をすべて使用することができる問い合わせです。 集合演算は入れ子にしたり、繋げたりすることができます。 例えば、以下の文を見てみましょう。

    query1 UNION query2 UNION query3

上記の文は以下のように実行されます。

    (query1 UNION query2) UNION query3

`UNION`は、`query2`の結果を`query1`の結果に付加します（しかし、実際に行が返された順序である保証はありません）。 さらに、`UNION ALL`を指定しないと、`DISTINCT`と同様に、結果から重複している行を削除します。

`INTERSECT`は、`query1`の結果と`query2`の結果の両方に含まれているすべての行を返します。 `INTERSECT ALL`を使用しないと、重複している行は削除されます。

`EXCEPT`は、`query1`の結果には含まれているけれども、`query2`の結果には含まれていないすべての行を返します。 （これが2つの問い合わせの差であると言われることがあります。） この場合も、`EXCEPT ALL` を使用しないと、重複している行は削除されます。

2つの問い合わせの和、積、差を算出するために、そこの2つの問い合わせは"和演算互換"でなければいけません。 つまり、その問い合わせが同じ数の列を返し、対応する列は互換性のあるデータ型（項10.5を参照）でなければなりません。

前のページ | ホーム | 次のページ
選択リスト | 上に戻る | 行の並び替え