Postgresql-unions-clause

提供:Dev Guides
移動先:案内検索

PostgreSQL-UNIONS句

PostgreSQLの UNION 句/演算子は、重複行を返さずに2つ以上のSELECTステートメントの結果を結合するために使用されます。

UNIONを使用するには、各SELECTで選択されている列の数、列式の数、データ型が同じで、順序が同じである必要がありますが、長さが同じである必要はありません。

構文

*UNION* の基本的な構文は次のとおりです-
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

UNION

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

ここで、特定の条件は、要件に基づいて任意の特定の式にすることができます。

次の2つのテーブルを検討してください、(a)リンク:/postgresql/company.sql [COMPANY]テーブルは次のとおりです-

testdb=# 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)

(b)別のテーブルはlink:/postgresql/department.sql [DEPARTMENT]です。

testdb=# 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)

次のように、UNION句とともにSELECTステートメントを使用してこれらの2つのテーブルを結合しましょう-

testdb=# 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]

ここで、特定の条件は、要件に基づいて任意の特定の式にすることができます。

さて、次のようにSELECTステートメントで上記の2つのテーブルを結合しましょう-

testdb=# 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)