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)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)別のテーブルは次のように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)
次に、SELECTステートメントとUNION句を使用して、これら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)
UNIONALL条項
UNION ALL演算子は、重複行を含む2つのSELECTステートメントの結果を組み合わせるために使用されます。UNIONに適用されるのと同じルールが、UNIONALL演算子にも適用されます。
構文
の基本構文 UNION ALL 次のとおりです-
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]
UNION ALL
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]
ここで、指定された条件は、要件に基づいた任意の式にすることができます。
例
ここで、上記の2つのテーブルをSELECTステートメントで次のように結合します。
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)