การเตรียมตารางและข้อมูล
mysql> CREATE TABLE DemoTable1847 (
GameStatus ENUM('PENDING','COMPLETED','CANCELLED')
);
mysql> INSERT INTO DemoTable1847 VALUES('PENDING');
mysql> INSERT INTO DemoTable1847 VALUES('COMPLETED');
mysql> INSERT INTO DemoTable1847 VALUES('CANCELLED');
เพิ่มค่าที่กำหนดเองด้วย UNION ALL
mysql> SELECT * FROM DemoTable1847
UNION ALL
SELECT 'REFUND';
ผลลัพธ์:
+------------+
| GameStatus |
+------------+
| PENDING |
| COMPLETED |
| CANCELLED |
| REFUND |
+------------+
ความแตกต่างระหว่าง UNION และ UNION ALL
| คำสั่ง | ลักษณะการทำงาน |
|---|---|
| UNION | รวมผลลัพธ์และลบแถวซ้ำ (Distinct) |
| UNION ALL | รวมผลลัพธ์ทั้งหมด รวมแถวซ้ำ (เร็วกว่า) |
กรณีการใช้งาน
- เพิ่มตัวเลือก "ทั้งหมด" ใน Dropdown/Select
- เพิ่มแถวสรุป (Summary Row) ในรายงาน
- เพิ่มค่า Default/Placeholder ที่ไม่ได้อยู่ในตาราง
- รวมข้อมูลจากหลายตารางที่มีโครงสร้างเหมือนกัน
ข้อจำกัด
- จำนวนคอลัมน์และลำดับต้องตรงกันทั้งสองฝั่ง
- ชนิดข้อมูลควรเข้ากันได้ (Type Compatibility)
- ไม่สามารถใช้ ORDER BY ได้โดยตรง (ต้องใช้ Subquery)