PostgreSQL - ข้อ UNIONS
PostgreSQL UNION อนุประโยค / ตัวดำเนินการใช้เพื่อรวมผลลัพธ์ของคำสั่ง SELECT สองคำขึ้นไปโดยไม่ส่งคืนแถวที่ซ้ำกัน
ในการใช้ UNION แต่ละ SELECT ต้องมีจำนวนคอลัมน์ที่เลือกเท่ากันจำนวนนิพจน์คอลัมน์เท่ากันชนิดข้อมูลเดียวกันและจัดให้อยู่ในลำดับเดียวกัน แต่ไม่จำเป็นต้องมีความยาวเท่ากัน
ไวยากรณ์
ไวยากรณ์พื้นฐานของ UNION มีดังนี้ -
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]
UNION
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]
เงื่อนไขที่กำหนดอาจเป็นนิพจน์ใดก็ได้ตามความต้องการของคุณ
ตัวอย่าง
พิจารณาสองตารางต่อไปนี้ (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 พร้อมกับอนุประโยคดังต่อไปนี้ -
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 Clause
ตัวดำเนินการ UNION ALL ใช้เพื่อรวมผลลัพธ์ของคำสั่ง 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 ของเราดังนี้ -
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)