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)