ใช้ UNION เพื่อรวมผลลัพธ์จากหลายตารางที่มีโครงสร้างเหมือนกัน
สร้างตารางแรก
mysql> create table DemoTable1 (
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName varchar(20) );
Query OK, 0 rows affected (0.90 sec)
เพิ่มข้อมูลตารางแรก
mysql> insert into DemoTable1(FirstName) values('Chris'); Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable1(FirstName) values('Adam'); Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable1(FirstName) values('Sam'); Query OK, 1 row affected (0.16 sec)
สร้างตารางที่สอง
mysql> create table DemoTable2(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName varchar(20) );
Query OK, 0 rows affected (1.75 sec)
เพิ่มข้อมูลตารางที่สอง
mysql> insert into DemoTable2(FirstName) values('John'); Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable2(FirstName) values('Tom'); Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable2(FirstName) values('Bob'); Query OK, 1 row affected (0.50 sec)
คิวรี่รวมข้อมูลจากสองตารางด้วย UNION
mysql> (select *from DemoTable1)
union
(select *from DemoTable2)
order by FirstName;
ผลลัพธ์:
+----+-----------+ | Id | FirstName | +----+-----------+ | 2 | Adam | | 3 | Bob | | 1 | Chris | | 1 | John | | 3 | Sam | | 2 | Tom | +----+-----------+ 6 rows in set (0.00 sec)
UNION vs UNION ALL
- UNION - ลบแถวซ้ำออก (DISTINCT) - ใช้เวลานานกว่า
- UNION ALL - เก็บแถวซ้ำไว้ - เร็วกว่า
เงื่อนไขการใช้ UNION
- จำนวนคอลัมน์ต้องเท่ากันในทุก SELECT
- ชนิดข้อมูลคอลัมน์ที่ตรงกันต้องเข้ากันได้ (compatible)
- ชื่อคอลัมน์จะใช้จาก SELECT ตัวแรก
ตัวอย่าง UNION ALL
(SELECT * FROM DemoTable1) UNION ALL (SELECT * FROM DemoTable2) ORDER BY FirstName;
ใช้ WITH (CTE) ใน MySQL 8.0+
WITH combined AS (
SELECT * FROM DemoTable1
UNION ALL
SELECT * FROM DemoTable2
)
SELECT * FROM combined ORDER BY FirstName;