Bài học theo mô-đun (3/4)
THAM GIA NGOÀI: tìm "khoảng trống"
Trong Mô-đun 3, bạn đã thấy LEFT JOIN: giữ tất cả hàng ở bên trái, ngay cả những hàng đó
không có kết quả phù hợp ở bên phải (trở thành NULL). Trong chương này chúng tôi
mở rộng bộ công cụ với RIGHT JOIN và FULL OUTER JOIN và chúng tôi tìm hiểu
cách sử dụng chúng để tìm "lỗ hổng" trong dữ liệu: các hàng trong một bảng
không có sự tương ứng trong cái kia.
Ba loại THAM GIA NGOÀI
A LEFT JOIN B ON … -- tutte le righe di A, con o senza match in B
A RIGHT JOIN B ON … -- tutte le righe di B, con o senza match in A
A FULL JOIN B ON … -- tutte le righe di A *e* di B; NULL dove non c'è matchA RIGHT JOIN B luôn có thể được viết lại thành B LEFT JOIN A giống nhau
ON: vấn đề là khả năng đọc được. Nhiều phong cách (bao gồm cả khóa học này)
luôn muốn sử dụng LEFT JOIN để đảm bảo tính nhất quán.
Mẫu "chống tham gia": tìm những cái còn thiếu
Cách sử dụng phổ biến nhất của LEFT JOIN không phải là "làm phong phú thêm dữ liệu trên
bên phải", nhưng tìm các hàng ở bên trái KHÔNG khớp với
đúng. Nó được gọi là anti-join:
-- Prodotti senza nessuna recensione:
SELECT p.id, p.name
FROM products p
LEFT JOIN reviews r ON r.product_id = p.id
WHERE r.id IS NULL
ORDER BY p.id;Logic mẫu:
LEFT JOINđính kèm các đánh giá về từng sản phẩm, nếu có;- đối với những sản phẩm không có đánh giá, tất cả các cột
rđều làNULL; WHERE r.id IS NULLchỉ giữ những sản phẩm đó.
Kiểm tra khóa: id IS NULL trên cột NOT NULL của bảng bên phải
có nghĩa là "không có sự trùng khớp". Bạn thường lọc theo PK bên tay phải
table chính xác vì lý do này.
THAM GIA BÊN NGOÀI ĐẦY ĐỦ
FULL OUTER JOIN giữ cả hai bên mà không có trận đấu nào. Nó hiếm khi được sử dụng,
thông thường để kiểm tra tính toàn vẹn dữ liệu:
SELECT c.id AS customer_id, o.id AS order_id
FROM customers c
FULL OUTER JOIN orders o ON o.customer_id = c.id
WHERE c.id IS NULL OR o.id IS NULL;Các hàng có c.id IS NULL sẽ là các đơn hàng mồ côi (một customer_id mà
không tồn tại trong customers). Những người có o.id IS NULL là khách hàng
không có mệnh lệnh. Trên tập dữ liệu của chúng tôi, khóa ngoại đảm bảo rằng không có khóa mồ côi nào
đơn đặt hàng tồn tại; chỉ còn lại những khách hàng không có đơn đặt hàng.
Hãy tự mình thử
Trova tutti i prodotti che non hanno mai Ricevuto una recensione. Tên Mostra solo la Colonna. Ordina theo tên.
Hiển thị gợi ý
Mẫu chống tham gia: LEFT JOIN đánh giá su sản phẩm_id, poi WHERE r.id IS NULL.
Giải pháp khả dụng sau 3 lần thử
Xem lại bài tập
Trova i clienti che non hanno mai Ordinato nulla. Email của Mostra. Ordina mỗi email.
Hiển thị gợi ý
Stesso mô hình dell'esercizio tiền lệ, ma fra khách hàng và đơn đặt hàng.
Giải pháp khả dụng sau 3 lần thử