PostgreSQL UNION 演算子

PostgreSQL UNION 演算子は、2つ以上のSELECT文の結果を結合します。

UNION 演算子は、2つ以上のSELECT文の結果セットを結合するために使用されます。

注意してください。UNION 内の各 SELECT 文は同じ数の列を持っている必要があります。列も類似したデータ型を持っている必要があります。さらに、各 SELECT 文の列の順序も同じでなければなりません。

構文

UNION の基本構文は次のとおりです:

SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

UNION

SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

ここの条件文は、必要に応じて任意の式を設定できます。

例

COMPANY テーブルを作成(COMPANY SQL ファイルをダウンロード)、データ内容は次のとおりです:

サンプルdb# select * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

DEPARTMENT テーブルを作成(DEPARTMENT SQL ファイルをダウンロード)、データ内容は次のとおりです:

サンプルdb=# SELECT * from DEPARTMENT;
 id | dept        | emp_id
----+-------------+--------
  1 | IT Billing  |      1
  2 | Engineering |      2
  3 | Finance     |      7
  4 | Engineering |      3
  5 | Finance     |      4
  6 | Engineering |      5
  7 | Finance     |      6
(7 rows)

次に、SELECT 文で UNION 句を使用して2つのテーブルを結合します。次のようになります:

SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT
   ON COMPANY.ID = DEPARTMENT.EMP_ID
   UNION
SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT
    ON COMPANY.ID = DEPARTMENT.EMP_ID;

結果は次のとおりです:

 emp_id | name  |  dept
--------+-------+--------------
      5 | David | Engineering
      6 | Kim   | Finance
      2 | Allen | Engineering
      3 | Teddy | Engineering
      4 | Mark  | Finance
      1 | Paul  | IT Billing
      7 | James | Finance
(7 rows)

UNION ALL 句

UNION ALL 演算子は、重複する行を持つ2つのSELECT文を接続できます。デフォルトでは、UNION 演算子は異なる値を選択します。重複する値を許可する場合は、UNION ALL を使用してください。

構文

UNION ALL 句の基本構文は次のとおりです:

SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

UNION ALL

SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

ここの条件文は、必要に応じて任意の式を設定できます。

例

次に、上記の2つのテーブルを SELECT 文と UNION ALL 句を組み合わせて結合してみましょう:

SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT
   ON COMPANY.ID = DEPARTMENT.EMP_ID
   UNION ALL
SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT
    ON COMPANY.ID = DEPARTMENT.EMP_ID;

結果は次のとおりです:

 emp_id | name  | dept
--------+-------+--------------
      1 | Paul  | IT Billing
      2 | Allen | Engineering
      7 | James | Finance
      3 | Teddy | Engineering
      4 | Mark  | Finance
      5 | David | Engineering
      6 | Kim   | Finance
      1 | Paul  | IT Billing
      2 | Allen | Engineering
      7 | James | Finance
      3 | Teddy | Engineering
      4 | Mark  | Finance
      5 | David | Engineering
      6 | Kim   | Finance
(14 rows)
その他の拡張