MySQL-এ UNION ALL ব্যবহার করে একাধিক কলামের ডেটা একই কলামে (রো-ওরিয়েন্টেড) রূপান্তর করা যায়।
উদাহরণ: বিষয়ভিত্তিক মার্কস
mysql> CREATE TABLE DemoTable729 (
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName VARCHAR(100),
MySQLMarks INT,
CMarks INT,
JavaMarks INT
);
Query OK, 0 rows affected (0.40 sec)
mysql> INSERT INTO DemoTable729 (StudentName, MySQLMarks, CMarks, JavaMarks) VALUES
('Chris', 94, 67, 75), ('Robert', 45, 99, 54), ('David', 57, 89, 43);
Query OK, 3 rows affected
ওয়াইড ফরম্যাট (প্রতিটি বিষয় আলাদা কলাম)
mysql> SELECT * FROM DemoTable729;
+-----------+-------------+------------+--------+-----------+ | StudentId | StudentName | MySQLMarks | CMarks | JavaMarks | +-----------+-------------+------------+--------+-----------+ | 1 | Chris | 94 | 67 | 75 | | 2 | Robert | 45 | 99 | 54 | | 3 | David | 57 | 89 | 43 | +-----------+-------------+------------+--------+-----------+
লং ফরম্যাট (UNION ALL - একটি কলামে সব মার্কস)
mysql> SELECT StudentId, StudentName, 'MySQL' AS SubjectName, MySQLMarks AS Score FROM DemoTable729 UNION ALL SELECT StudentId, StudentName, 'C' AS SubjectName, CMarks AS Score FROM DemoTable729 UNION ALL SELECT StudentId, StudentName, 'Java' AS SubjectName, JavaMarks AS Score FROM DemoTable729;
+-----------+-------------+-------------+-------+ | StudentId | StudentName | SubjectName | Score | +-----------+-------------+-------------+-------+ | 1 | Chris | MySQL | 94 | | 2 | Robert | MySQL | 45 | | 3 | David | MySQL | 57 | | 1 | Chris | C | 67 | | 2 | Robert | C | 99 | | 3 | David | C | 89 | | 1 | Chris | Java | 75 | | 2 | Robert | Java | 54 | | 3 | David | Java | 43 | +-----------+-------------+-------------+-------+
UNION vs UNION ALL
UNION→ ডুপ্লিকেট সরিয়ে দেয় (স্লো)UNION ALL→ সব রো রেখে দেয় (ফাস্ট, এখানে ডুপ্লিকেট নেই)
ব্যবহার: রিপোর্টিং, চার্টিং, এক্সপোর্টে লং ফরম্যাট দরকার হলে।