เมื่อต้องการนำค่าจาก 2 คอลัมน์ (หรือมากกว่า) มารวมแสดงในคอลัมน์เดียว สามารถใช้คำสั่ง UNION ALL ได้ ซึ่งจะรวมผลลัพธ์จากหลาย SELECT เข้าด้วยกันโดยไม่ลบแถวซ้ำ (ต่างจาก UNION ที่จะลบซ้ำ)
Syntax
SELECT column1 AS alias FROM table_name UNION ALL SELECT column2 AS alias FROM table_name;
ตัวอย่างการใช้งาน
1. สร้างตารางและเพิ่มข้อมูล
mysql> create table DemoTable1813 ( Name1 varchar(20), Name2 varchar(20) ); Query OK, 0 rows affected (0.00 sec)
mysql> insert into DemoTable1813 values('John','Chris'); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1813 values('Adam','Robert'); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1813 values('Mike','Sam'); Query OK, 1 row affected (0.00 sec)
ข้อมูลต้นฉบับ:
mysql> select * from DemoTable1813;
+-------+--------+ | Name1 | Name2 | +-------+--------+ | John | Chris | | Adam | Robert | | Mike | Sam | +-------+--------+ 3 rows in set (0.00 sec)
2. ใช้ UNION ALL รวมค่าจาก Name1 และ Name2
mysql> select Name1 as Name from DemoTable1813
-> union all
-> select Name2 as Name from DemoTable1813;
ผลลัพธ์:
+--------+ | Name | +--------+ | John | | Adam | | Mike | | Chris | | Robert | | Sam | +--------+ 6 rows in set (0.00 sec)
UNION vs UNION ALL
| คำสั่ง | ลบแถวซ้ำ | ประสิทธิภาพ | ใช้เมื่อไหร่ |
|---|---|---|---|
| UNION | ใช่ | ช้ากว่า (ต้องตรวจสอบซ้ำ) | ต้องการค่าที่ไม่ซ้ำกัน |
| UNION ALL | ไม่ | เร็วกว่า | ต้องการค่าทั้งหมด รวมซ้ำได้ |
การประยุกต์ใช้: รวม 3 คอลัมน์ขึ้นไป
SELECT Name1 AS Name FROM DemoTable1813 UNION ALL SELECT Name2 AS Name FROM DemoTable1813 UNION ALL SELECT Name3 AS Name FROM DemoTable1813;
สรุป: ใช้ UNION ALL เพื่อรวมค่าจากหลายคอลัมน์/ตารางในคอลัมน์เดียว เร็วกว่า UNION เพราะไม่ตรวจสอบค่าซ้ำ เหมาะสำหรับรายงานหรือการนำออกสู่ไฟล์