PostgreSQL - klauzula UNIONS
PostgreSQL UNION klauzula / operator służy do łączenia wyników dwóch lub więcej instrukcji SELECT bez zwracania zduplikowanych wierszy.
Aby użyć UNION, każdy SELECT musi mieć tę samą liczbę wybranych kolumn, taką samą liczbę wyrażeń kolumnowych, ten sam typ danych i mieć je w tej samej kolejności, ale nie muszą mieć tej samej długości.
Składnia
Podstawowa składnia UNION wygląda następująco -
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]
UNION
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]
Tutaj podanym warunkiem może być dowolne wyrażenie oparte na twoim wymaganiu.
Przykład
Rozważ dwie poniższe tabele: (a) Tabela COMPANY przedstawia się następująco -
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) Kolejna tabela to DEPARTMENT, jak następuje -
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)
Teraz połączmy te dwie tabele za pomocą instrukcji SELECT wraz z klauzulą UNION w następujący sposób -
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;
Dałoby to następujący wynik -
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)
Klauzula UNION ALL
Operator UNION ALL służy do łączenia wyników dwóch instrukcji SELECT, w tym zduplikowanych wierszy. Te same zasady, które mają zastosowanie do UNION, dotyczą również operatora UNION ALL.
Składnia
Podstawowa składnia UNION ALL wygląda następująco -
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]
UNION ALL
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]
Tutaj podanym warunkiem może być dowolne wyrażenie oparte na twoim wymaganiu.
Przykład
Teraz połączmy wyżej wymienione dwie tabele w naszej instrukcji SELECT w następujący sposób -
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;
Dałoby to następujący wynik -
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)