SELECT ... UNION SELECT ... UNION SELECT ...
ผลลัพธ์ที่ได้จริง ๆ ก็คือแถวข้อมูลที่ได้รับจากคำสั่ง SELECT แรก ตามด้วยแถวข้อมูลที่ได้รับจากคำสั่ง SELECT ที่สอง และต่อด้วยแถวข้อมูลที่ได้รับจากคำสั่ง SELECT ที่สาม ซึ่งแต่ละคำสั่ง SELECT จะต้องมีจำนวน field ที่เท่ากัน
โดยปกติแล้ว UNION จะทำการตัดแถวที่ซ้ำกันออก แต่ถ้าเราต้องการเก็บข้อมูลทุกแถวไว้ให้ใช้ UNION ALL แทน
สมมิว่าเราต้องการเก็บ mailling list จาก 3 ตาราง ซึ่งแต่ละตารางนั้นใช้ MySQL package ที่ต่างกันไป และแต่ละ package จะทำการเก็บ name และ email address เหมือนกัน โดยมีโครงสร้างตารางดังนี้
CREATE TABLE list1 ( subscriber CHAR(60), email CHAR(60) ); CREATE TABLE list2 ( name CHAR(255), address CHAR(255) ); CREATE TABLE list3 ( email CHAR(50), real_name CHAR(30) );
ในแต่ละตารางจะประกอบไปด้วยข้อมูลดังนี้
| List1 | |
|---|---|
| subscriber | |
| Genetic | genetic@stepcoding.com |
| Admin | admin@stepcoding.com |
| List2 | |
|---|---|
| name | address |
| Casper | casper@basic-skill.com |
| Admin | admin@basic-skill.com |
| List3 | |
|---|---|
| real_name | |
| John | john@basic-digg.com |
| Admin | admin@basic-digg.com |
เมื่อเราต้องการแสดงข้อมูลจาก mailling list ทั้ง 3 ตาราง จะต้องใช้คำสั่งดังนี้
SELECT subscriber, email FROM list1 UNION SELECT name, address FROM list2 UNION SELECT real_name, email FROM list3;
| subscriber | |
|---|---|
| Genetic | genetic@stepcoding.com |
| Admin | admin@stepcoding.com |
| Casper | casper@basic-skill.com |
| Admin | admin@basic-skill.com |
| John | john@basic-digg.com |
| Admin | admin@basic-digg.com |
ผู้สนับสนุน