เมื่อสืบค้นฐานข้อมูล คุณอาจต้องการรวมผลลัพธ์จากคำสั่ง SELECT หลายคำสั่งเข้าด้วยกัน เช่น ต้องการรายชื่อเมืองที่ลูกค้าอาศัยอยู่ และเมืองที่สาขาบริษัทตั้งอยู่ แทนที่จะรัน 2 คิวรี่แยกกัน สามารถรวมได้ในคิวรี่เดียวด้วยคำสั่ง SQL UNION
ออปอเรเตอร์ UNION ใช้รวมผลลัพธ์จาก SELECT 2 คำสั่งขึ้นไป ให้กลายเป็นชุดผลลัพธ์เดียว (single result set)
ในบทช่วยสอนนี้ เราจะแยกวิเคราะห์พื้นฐานของ SQL UNION และกรณีที่ควรนำไปใช้
บทนำสั้นๆ เกี่ยวกับคิวรี่ (Query Refresher)
โปรแกรมเมอร์ใช้คิวรี่เพื่อดึงข้อมูลจากฐานข้อมูล คิวรี่เกือบทุกครั้งเริ่มต้นด้วยคำสั่ง SQL SELECT และดึงข้อมูลตามเงื่อนไขที่กำหนด ปกติจะมีออปอเรเตอร์ FROM ระบุตารางที่จะสืบค้น รวมถึงออปอเรเตอร์อื่นๆ สำหรับกรองข้อมูล
ไวยากรณ์ทั่วไปของคิวรี่ SQL:
SELECT column_name FROM table_name WHERE your_condititions_are_met;
ตัวอย่างคิวรี่ดึงชื่อพนักงานทั้งหมด:
SELECT name FROM employees;
ผลลัพธ์:
| name |
| Luke Mike Hannah Geoff Alexis Emma Jonah |
(7 แถว)
หากต้องการดึงหลายคอลัมน์ ให้คั่นชื่อคอลัมน์ด้วยจุลภาค หรือใช้ * เพื่อดึงทุกคอลัมน์
SQL UNION
ออปอเรเตอร์ SQL UNION รวมผลลัพธ์จาก 2 คิวรี่ขึ้นไป ให้เป็นตารางเดียว
เงื่อนไขในการใช้ UNION 2 ข้อ:
- ชนิดข้อมูลของคอลัมน์ต้องเข้ากันได้ (compatible) - เช่นถ้า salary เป็น integer ในตารางหนึ่ง และ float ในอีกตาราง UNION จะไม่ทำงาน
- จำนวนและลำดับของคอลัมน์ต้องเหมือนกันในทุกคิวรี่
ไวยากรณ์คิวรี่ UNION:
SELECT column_name FROM table1_name UNION SELECT column_name FROM table2_name;
ตัวอย่างการใช้งาน
สมมติเราต้องการส่งประกาศให้ลูกค้าทุกคน และพนักงานทุกคน เราสามารถดึงอีเมลทั้งสองกลุ่มมารวมกันได้:
SELECT name, email FROM employees UNION SELECT name, email FROM customers;
ผลลัพธ์:
| name | |
| Emma | emma.a@gmail.com |
| Jonah | jonah.h@gmail.com |
| Hannah | hannah.y@gmail.com |
| Luke | luke.e@gmail.com |
| John | john.p@outlook.com |
| Geoff | geoff.l@gmail.com |
| Alexis | alexis.e@gmail.com |
| Fred | fred.s@gmail.com |
| Erin | erin.a@gmail.com |
| Katy | katy.l@gmail.com |
| Anne | anne.s@gmail.com |
| Tom | tom.h@gmail.com |
| Mike | mike.h@gmail.com |
| Hannah | hannah.p@gmail.com |
(14 แถว)
สังเกตว่า UNION จะ ลบแถวซ้ำ (duplicate rows) ออกจากผลลัพธ์สุดท้าย หากมีพนักงานที่เป็นลูกค้าพร้อมกัน ข้อมูลจะแสดงเพียงครั้งเดียว
หากต้องการรวมแถวซ้ำด้วย ให้เพิ่มคีย์เวิร์ด ALL:
SELECT name, email FROM employees UNION ALL SELECT name, email FROM customers;
สรุป
ในบทช่วยสอนนี้ เราได้แยกวิเคราะห์การใช้งานออปอเรเตอร์ UNION บน SQL server ตามที่อธิบายไว้ UNION ใช้ดึงข้อมูลจาก 2 ตารางและรวมเป็นตารางเดียว เช่น หากต้องการรายชื่อที่อยู่ของผู้จัดจำหน่ายและผู้จัดจำหน่ายย่อยที่เก็บในตารางต่างกัน สามารถใช้คิวรี่ UNION ได้