PlusMagi's Blog By Pitt Phunsanit Ai,Database 排除アート คือ

排除アート คือ

ในโลกของการวิเคราะห์ข้อมูล (Data Analytics) แนวคิดที่ว่าด้วยการ ‘กีดกัน’ (Exclusion) นั้นมีความสำคัญไม่แพ้การค้นหาสิ่งที่ปรากฏอย่างชัดเจน การทำความเข้าใจว่าข้อมูลชุดใดถูกนำเสนอ ข้อมูลชุดใดถูกมองข้าม หรือข้อมูลชุดใดที่ขาดหายไปจากความสัมพันธ์ที่เราคาดหวัง จึงเป็นกุญแจสำคัญในการวิเคราะห์เชิงลึก

หากเราเปรียบเทียบแนวคิดนี้ในเชิงศิลปะ (Exclusion Art) มันคือการเน้นย้ำถึง ‘พื้นที่ว่าง’ (The Void) หรือ ‘ความเงียบงัน’ ที่ถูกสร้างขึ้นรอบ ๆ ผลงาน แต่เมื่อเราย้ายมาสู่โลกของฐานข้อมูล PostgreSQL การกีดกันนี้คือกลไกทางเทคนิคที่ทรงพลังที่สุดในการระบุความสัมพันธ์ที่ขาดหายไป (Missing Relationships) หรือการค้นหาข้อมูลที่ไม่มีคู่กัน (Anti-Join)

หลักการ Exclusion ใน PostgreSQL: การค้นหาสิ่งที่ไม่มีอยู่

ในเชิงระบบฐานข้อมูล การ ‘กีดกัน’ คือการที่เราต้องการค้นหาแถวข้อมูล (Rows) ในตารางหลัก (Primary Table) ที่ไม่มีการจับคู่ (Match) กับแถวข้อมูลใด ๆ ในตารางรอง (Secondary Table) การใช้คำสั่งพื้นฐานอย่าง WHERE NOT EXISTS หรือการใช้ LEFT JOIN ร่วมกับเงื่อนไข WHERE IS NULL คือวิธีการหลักในการจำลองแนวคิดนี้

ตัวอย่างการใช้งาน: นักเรียนที่ยังไม่ลงทะเบียนเรียน

สมมติว่าเรามีตาราง students (นักเรียน) และตาราง enrollments (การลงทะเบียนเรียน) เราต้องการหาว่ามีนักเรียนคนใดบ้างที่ยังไม่เคยลงทะเบียนเรียนในวิชาใด ๆ เลย นี่คือการใช้หลักการ Exclusion เพื่อค้นหา ‘ช่องว่าง’ ของข้อมูล

SQL

-- 1. สร้างตารางตัวอย่าง (Setup Tables) --
CREATE TABLE students (
    student_id INT PRIMARY KEY,
    student_name VARCHAR(100)
);

CREATE TABLE enrollments (
    enrollment_id SERIAL PRIMARY KEY,
    student_id INT,
    course_id VARCHAR(50)
);

-- 2. ใส่ข้อมูลตัวอย่าง --
INSERT INTO students (student_id, student_name) VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie');

INSERT INTO enrollments (student_id, course_id) VALUES
(1, 'Math'),
(1, 'Art'),
(2, 'Science');
-- หมายเหตุ: Charlie (ID 3) ไม่มีข้อมูลในตาราง enrollments

-- 3. คำสั่ง Exclusion: ค้นหานักเรียนที่ไม่มีการลงทะเบียนเรียนเลย --
SELECT s.student_name
FROM students s
LEFT JOIN enrollments e ON s.student_id = e.student_id
WHERE e.student_id IS NULL;

คำอธิบายโค้ด:
คำสั่งนี้ใช้ LEFT JOIN เพื่อดึงข้อมูลนักเรียนทั้งหมด (จากตาราง students) และพยายามจับคู่กับข้อมูลการลงทะเบียน (enrollments) หากนักเรียนคนใดไม่มีการลงทะเบียนเลย (เช่น Charlie) คอลัมน์จากตาราง enrollments จะมีค่าเป็น NULL การใช้ WHERE e.student_id IS NULL จึงเป็นการกรองเอาเฉพาะแถวที่เกิดการ ‘กีดกัน’ หรือไม่มีคู่กันออกมา ซึ่งส่งผลให้เราได้ชื่อของนักเรียนที่ยังไม่ลงทะเบียนเรียน

บทสรุป

แนวคิด Exclusion ใน PostgreSQL ไม่ได้เป็นเพียงแค่การเขียนคำสั่ง SELECT แต่คือการใช้ตรรกะในการวิเคราะห์ความสัมพันธ์ที่ขาดหายไป การเข้าใจกลไกนี้ช่วยให้เราสามารถระบุจุดบอด (Blind Spots) ในชุดข้อมูลได้อย่างแม่นยำ ไม่ว่าจะเป็นการหาลูกค้าที่ไม่ได้ซื้อสินค้าในช่วงเวลาที่กำหนด หรือการตรวจสอบว่าอุปกรณ์ใดที่ยังไม่ได้เชื่อมต่อกับระบบ การใช้ LEFT JOIN และ WHERE IS NULL จึงเป็นเครื่องมือที่ขาดไม่ได้สำหรับ Senior Data Architect ทุกคน