Một JOIN kết hợp row từ hai table bằng cách khớp một điều kiện, thường là foreign key. Loại join quyết định điều gì xảy ra với các row không có khớp ở phía bên kia.
Một JOIN kết hợp row từ hai table bằng cách khớp một điều kiện, thường là foreign key. Loại join quyết định điều gì xảy ra với các row không có khớp ở phía bên kia.
NULL.-- customers(id, name) orders(id, customer_id, total)
-- INNER: chỉ customer có ít nhất một order
SELECT c.name, o.total
FROM customers c
INNER JOIN orders o ON o.customer_id = c.id;
-- LEFT: mọi customer, kể cả người không có order nào (total = NULL)
SELECT c.name, o.total
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id;
-- Dùng kinh điển: tìm customer KHÔNG có order
SELECT c.name
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
WHERE o.id IS NULL; -- phía NULL của LEFT JOIN để lộ chỗ thiếu
WHERE (vd. WHERE o.total > 100) âm thầm biến LEFT JOIN trở lại thành INNER JOIN, vì NULL > 100 là false. Đặt điều kiện đó trong mệnh đề ON nếu bạn muốn giữ các row không khớp.Phần lớn truy vấn thực tế trải qua nhiều table, và loại join sai âm thầm làm mất hoặc nhân đôi row — một bug trả về kết quả nghe có vẻ hợp lý. Biết rằng LEFT JOIN + IS NULL tìm được các row "thiếu", và rằng một WHERE trên phía null hủy hiệu lực LEFT, sẽ tránh được cả một lớp lỗi báo cáo.
Thư viện câu hỏi phỏng vấn IT với đáp án chi tiết — từ Junior đến Senior.
Ủng hộ