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つの請求書すべてが返還されたことがわかります。