บทนำ
เมื่อต้องการดึงข้อมูลด้วยเงื่อนไข WHERE หลายเงื่อนไข และจำกัดจำนวนแถว (LIMIT) สำหรับแต่ละเงื่อนไข สามารถใช้ตัวดำเนินการ UNION ALL เพื่อรวมผลลัพธ์จากหลายคำสั่ง SELECT เข้าด้วยกัน
ตัวอย่างการสร้างตารางและเพิ่มข้อมูล
mysql> CREATE TABLE DemoTable (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Subject VARCHAR(100)
-> );
Query OK, 0 rows affected (0.64 sec)
mysql> INSERT INTO DemoTable(Subject) VALUES('MySQL');
mysql> INSERT INTO DemoTable(Subject) VALUES('MySQL');
mysql> INSERT INTO DemoTable(Subject) VALUES('MongoDB');
mysql> INSERT INTO DemoTable(Subject) VALUES('MongoDB');
mysql> INSERT INTO DemoTable(Subject) VALUES('MySQL');
mysql> INSERT INTO DemoTable(Subject) VALUES('Java');
mysql> INSERT INTO DemoTable(Subject) VALUES('MySQL');
mysql> INSERT INTO DemoTable(Subject) VALUES('MongoDB');
แสดงข้อมูลทั้งหมด
mysql> SELECT * FROM DemoTable;
ผลลัพธ์
+----+---------+
| Id | Subject |
+----+---------+
| 1 | MySQL |
| 2 | MySQL |
| 3 | MongoDB |
| 4 | MongoDB |
| 5 | MySQL |
| 6 | Java |
| 7 | MySQL |
| 8 | MongoDB |
+----+---------+
8 rows in set (0.00 sec)
คำสั่งสำหรับหลาย WHERE พร้อม LIMIT
mysql> (SELECT * FROM DemoTable WHERE Subject='MySQL' LIMIT 3)
-> UNION ALL
-> (SELECT * FROM DemoTable WHERE Subject='MongoDB' LIMIT 5);
ผลลัพธ์
+----+---------+
| Id | Subject |
+----+---------+
| 1 | MySQL |
| 2 | MySQL |
| 5 | MySQL |
| 3 | MongoDB |
| 4 | MongoDB |
| 8 | MongoDB |
+----+---------+
6 rows in set (0.00 sec)
สรุป
การใช้ UNION ALL ช่วยให้สามารถกำหนด LIMIT แยกต่างหากสำหรับแต่ละเงื่อนไข WHERE ได้ ซึ่งมีประโยชน์เมื่อต้องการควบคุมจำนวนแถวที่ดึงมาจากแต่ละกลุ่มข้อมูล