ในโลกของการจัดการข้อมูลขนาดใหญ่ (Big Data) การที่เราต้องเปรียบเทียบความสัมพันธ์ระหว่างชุดข้อมูลที่ถูกจัดเก็บแยกส่วนกันเป็นเรื่องที่เกิดขึ้นเป็นประจำ ไม่ว่าจะเป็นการหาว่าลูกค้ากลุ่ม A มีสินค้าที่ตรงกับสินค้ากลุ่ม B หรือการตรวจสอบว่ารายการสินค้าใดที่ควรจะมีแต่ขาดหายไปจากระบบใดระบบหนึ่ง แนวคิดในการเปรียบเทียบและหาความสัมพันธ์ระหว่างชุดข้อมูลเหล่านี้จึงเป็นทักษะสำคัญที่นักพัฒนาฐานข้อมูลทุกคนต้องรู้
ในทางคณิตศาสตร์ เราเรียกกระบวนการนี้ว่า Set Theory (ทฤษฎีเซต) และ SQL ได้นำแนวคิดอันทรงพลังนี้มาใช้ผ่าน Set Operations ซึ่งช่วยให้เราสามารถปฏิบัติต่อผลลัพธ์ของ Query ว่าเป็น ‘ชุดข้อมูล’ ที่มีคุณสมบัติเฉพาะตัว การดำเนินการหลักๆ ที่เราจะเจาะลึกคือ INTERSECT และ EXCEPT (หรือ MINUS ซึ่งใช้ในระบบอื่น แต่ใน PostgreSQL เราใช้ EXCEPT)
⚙️ หลักการทำงานของ Set Operations ใน PostgreSQL
Set Operations ใน SQL ต้องการให้ Query ทั้งสองชุดที่นำมาดำเนินการมีโครงสร้าง (Schema) ที่เหมือนกันทุกประการ ทั้งจำนวนคอลัมน์และชนิดข้อมูลของคอลัมน์เหล่านั้น การดำเนินการเหล่านี้จะทำงานโดยการเปรียบเทียบแถวต่อแถว (Row by Row) ตามหลักการของทฤษฎีเซต
🤝 1. INTERSECT: การหาจุดร่วม (Common Elements)
INTERSECT จะคืนค่าเฉพาะแถวที่ปรากฏอยู่ในผลลัพธ์ของ Query ทั้งสองชุดเท่านั้น พูดง่ายๆ คือ มันจะหา ‘จุดร่วม’ หรือสิ่งที่เหมือนกันระหว่างชุดข้อมูล A และชุดข้อมูล B เท่านั้น
ตัวอย่างการใช้งาน (PostgreSQL):
SQL
-- สมมติว่าเรามีตาราง A และ B ที่เก็บรหัสสินค้าที่ลูกค้าซื้อ<br>SELECT product_id FROM sales_a<br>INTERSECT<br>SELECT product_id FROM sales_b;
ผลลัพธ์ที่ได้คือ product_id ที่ปรากฏในทั้ง sales_a และ sales_b
➖ 2. EXCEPT: การหาความแตกต่าง (Difference)
EXCEPT จะทำการลบแถวทั้งหมดในชุดแรกออกด้วยแถวที่มีอยู่จริงในชุดที่สอง ผลลัพธ์ที่ได้จึงเป็นรายการเฉพาะสิ่งที่อยู่ในชุดแรก (A) แต่ไม่อยู่ในชุดที่สอง (B) ซึ่งมีประโยชน์อย่างมากในการตรวจสอบความสมบูรณ์ของข้อมูล (Data Integrity) หรือการหาข้อมูลที่ขาดหายไป
ตัวอย่างการใช้งาน (PostgreSQL):
SQL
-- หา Product ID ที่มีอยู่ในรายการสินค้า A แต่ไม่มีอยู่ในรายการสินค้า B<br>SELECT product_id FROM products_a<br>EXCEPT<br>SELECT product_id FROM products_b;
ผลลัพธ์ที่ได้คือ product_id ที่อยู่ใน products_a แต่ไม่อยู่ใน products_b
💡 ข้อควรระวังและข้อจำกัด
Set Operations เป็นเครื่องมือที่ทรงพลัง แต่มีข้อจำกัดที่ต้องระวังคือ ทุก Query ที่ใช้ Set Operations จะกำจัดแถวที่ซ้ำกัน (Duplicate Rows) ออกไปโดยอัตโนมัติ หากคุณต้องการเก็บแถวที่ซ้ำกันทั้งหมด คุณควรใช้ UNION ALL แทน UNION หรือ INTERSECT/EXCEPT
✅ บทสรุป: การเลือกใช้ Set Operations ที่เหมาะสม
การเลือกใช้ Set Operations ที่ถูกต้องขึ้นอยู่กับโจทย์ทางธุรกิจของคุณ หากคุณต้องการทราบว่าข้อมูลชุดไหนที่ ‘เหมือนกัน’ ให้ใช้ INTERSECT แต่ถ้าคุณต้องการทราบว่าข้อมูลชุดไหนที่ ‘มีเฉพาะ’ ในชุดแรกและหายไปจากชุดที่สอง ให้ใช้ EXCEPT การทำความเข้าใจ Set Operations เหล่านี้จะช่วยให้คุณเขียน Query ที่ซับซ้อนและแม่นยำยิ่งขึ้นในการวิเคราะห์ข้อมูลขนาดใหญ่ใน PostgreSQL