JOIN รวมแถวจากสองตารางเข้าด้วยกันโดยจับคู่ตามเงื่อนไข ซึ่งมักเป็น foreign key ชนิดของ join จะเป็นตัวกำหนดว่าจะเกิดอะไรกับแถวที่ ไม่มีคู่ที่ตรงกัน อีกฝั่งหนึ่ง
JOIN รวมแถวจากสองตารางเข้าด้วยกันโดยจับคู่ตามเงื่อนไข ซึ่งมักเป็น foreign key ชนิดของ join จะเป็นตัวกำหนดว่าจะเกิดอะไรกับแถวที่ ไม่มีคู่ที่ตรงกัน อีกฝั่งหนึ่ง
NULL กลับมา-- customers(id, name) orders(id, customer_id, total)
-- INNER: only customers who have at least one order
SELECT c.name, o.total
FROM customers c
INNER JOIN orders o ON o.customer_id = c.id;
-- LEFT: every customer, even those with zero orders (total = NULL)
SELECT c.name, o.total
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id;
-- Classic use: find customers with NO orders
SELECT c.name
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
WHERE o.id IS NULL; -- the LEFT JOIN's NULL side reveals the gap
WHERE (เช่น WHERE o.total > 100) จะเปลี่ยน LEFT JOIN กลับเป็น INNER JOIN แบบเงียบ ๆ เพราะ NULL > 100 เป็นเท็จ หากต้องการเก็บแถวที่ไม่มีคู่ ให้ใส่เงื่อนไขเช่นนั้นไว้ในส่วน ONQuery จริงส่วนใหญ่ครอบคลุมหลายตาราง และชนิดของ join ที่ผิดจะทำให้แถวหายหรือซ้ำแบบเงียบ ๆ — เป็นบั๊กที่คืนผลลัพธ์ที่ ดูสมเหตุสมผล การรู้ว่า LEFT JOIN + IS NULL ใช้หาแถวที่ "หายไป" ได้ และการใส่ WHERE บนฝั่งที่เป็น null จะยกเลิกผลของ LEFT จะช่วยป้องกันข้อผิดพลาดของรายงานทั้งกลุ่ม
คลังคำถามสัมภาษณ์งาน IT พร้อมคำตอบโดยละเอียด — ตั้งแต่ระดับ Junior ถึง Senior
บริจาค