Modül dersleri (3/4)
OUTER JOIN: "boşlukları" bulma
Modül 3'te LEFT JOIN gördünüz: tüm satırları solda tutun, bunlar dahil
sağda eşleşme olmadan (NULL olur). Bu bölümde biz
araç setini RIGHT JOIN ve FULL OUTER JOIN ile genişletin ve öğrenelim
verilerdeki "delikleri" bulmak için bunları nasıl kullanabilirim: bir tablodaki satırlar
diğerinde karşılığı yoktur.
Üç tür OUTER JOIN
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 her zaman aynı şekilde B LEFT JOIN A olarak yeniden yazılabilir.
ON: bu bir okunabilirlik meselesidir. Birçok stil (bu kurs dahil)
tutarlılık için her zaman LEFT JOIN kullanmayı tercih edin.
"Birleşmeyi önleme" modeli: eksik olanları bulma
LEFT JOIN'nin en yaygın kullanımı "verilerle zenginleştirmek" değildir.
sağda", ancak solda eşleşmesi olmayan satırları bulun
doğru. Buna anti-join denir:
-- 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;Desen mantığı:
LEFT JOINvarsa her ürünün yorumlarını ekler;- İncelemesi olmayan ürünler için tüm
rsütunlarıNULLşeklindedir; WHERE r.id IS NULLyalnızca bu ürünleri saklar.
Anahtar kontrolü: sağdaki tablonun NOT NULL sütununda id IS NULL
"eşleşme olmadı" anlamına gelir. Sık sık sağ taraftaki PK'yi filtrelersiniz
tam da bu nedenle tablo.
TAM DIŞ BİRLEŞİM
FULL OUTER JOIN her iki tarafı da maçsız durumda tutuyor. Nadiren kullanılır,
genellikle veri bütünlüğü kontrolleri için:
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.id IS NULL içeren satırlar yetim siparişler olacaktır (bir customer_id
customers'de mevcut değil). o.id IS NULL sahibi olanlar müşteridir
emir olmadan. Veri setimizde yabancı anahtarlar hiçbir yetim kalmayacağını garanti eder
emirler var; sadece siparişi olmayan müşteriler kalıyor.
Kendin dene
Bir düzeltme yapmamak için bir şeyler yaptım ve yaptım. Mostra solo la koloni adı. İsim başına Ordina.
İpucu göster
Desen anti-join: LEFT JOIN, ürün_id'sini inceler, poi r.id NULL'DUR.
3 denemeden sonra çözüm mevcut
Alıştırmayı gözden geçirin
Müşterilerimin hiçbirinin siparişi sıfır değil. Mostra e-postası. E-posta başına Ordina.
İpucu göster
Müşteriler ve siparişler için önceden hazırlanmış bir örnek.
3 denemeden sonra çözüm mevcut