PostgreSQLでは、UNION
演算子は、複数のクエリの結果を1つの結果セットに結合します。
公式の構文は次のようになります:
query1 UNION [ALL] query2
UNION
演算子はquery2
の結果を追加します query1
の結果に (ただし、これが実際に行が返される順序であるという保証はありません)。
UNION ALL
でない限り、重複する行は削除されます 使用されます。
次のテーブルがあるとします。
SELECT * FROM Teachers;
SELECT * FROM Students;
結果:
teacherid | teachername -----------+------------- 1 | Warren 2 | Ben 3 | Cathy 4 | Cathy 5 | Bill 6 | Bill studentid | studentname -----------+------------- 1 | Faye 2 | Jet 3 | Spike 4 | Ein 5 | Warren 6 | Bill
UNION
を使用できます すべての教師と生徒を返却するオペレーター:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;
結果:
teachername ------------- Spike Ben Ein Cathy Jet Faye Bill Warren (8 rows)
デフォルトでは、UNION
演算子は暗黙的にDISTINCT
を適用します 手術。つまり、デフォルトでは個別の値のみを返します。したがって、上記の結果には、ウォーレン、キャシー、ビルがそれぞれ1つずつ含まれています。これは、結合されたテーブルに実際に2つのウォーレン、2つのキャシー、および3つのビルが含まれているという事実にもかかわらずです(キャシーと呼ばれる2人の教師、ウォーレンと呼ばれる教師と顧客、およびビルと呼ばれる2人、およびビルと呼ばれる1人の学生がいます)。
DISTINCT
を明示的に使用する例を次に示します。 演算子:
SELECT TeacherName FROM Teachers
UNION DISTINCT
SELECT StudentName FROM Students;
結果:
teachername ------------- Spike Ben Ein Cathy Jet Faye Bill Warren (8 rows)
同じ結果。
ALL
を使用できます 結果に重複する値を含めるキーワード:
SELECT TeacherName FROM Teachers
UNION ALL
SELECT StudentName FROM Students;
結果:
teachername ------------- Warren Ben Cathy Cathy Bill Bill Faye Jet Spike Ein Warren Bill (12 rows)
今回は、最初の例で取得した8行ではなく、12行を取得しました。
キャシーの両方が返還され、3つの請求書すべてが返還されたことがわかります。