PlusMagi's Blog By Pitt Phunsanit Database Set Operations ใน SQL: การใช้ INTERSECT และ EXCEPT / MINUS หาจุดร่วมและจุดต่างของข้อมูล

Set Operations ใน SQL: การใช้ INTERSECT และ EXCEPT / MINUS หาจุดร่วมและจุดต่างของข้อมูล

ในโลกของการจัดการข้อมูลขนาดใหญ่ (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

Exit mobile version