İlişkiler ve JOIN
LEFT, RIGHT ve FULL OUTER JOIN
Eşleşmeyen kayıtları kaybetme.
Kavramı anlayalım
LEFT JOIN sol tablonun tüm satırlarını korur; eşleşmeyen sağ sütunları NULL yapar. RIGHT JOIN aynı mantığı ters yönde uygular. FULL OUTER JOIN iki tarafın da eşleşmeyenlerini korur. Karmaşık raporlarda tablo sırasını açık tutmak için LEFT JOIN çoğu zaman daha okunabilirdir.
LEFT JOIN sonrasında sağ tablonun alanına WHERE koşulu koymak eşleşmeyen satırları eleyebilir. “Tüm müşteriler ve varsa ödenmiş siparişleri” için ödeme filtresini ON içine yerleştir. NULL ile işaretlenen eşleşmeme durumunu gerçek veri NULL’ından ayırırken sağ tablonun NULL olamayan anahtarını kontrol et.
Siparişsiz müşteri, satılmayan ürün ve karşılaştırmalı veri uzlaştırma raporlarında.
Sağ taraftaki filtreyi WHERE’e koyup LEFT JOIN’i fiilen iç birleşime çevirmek.
Aynı konu. Üç farklı derinlik.
SELECT c.FullName, o.OrderId FROM lab.Customer AS c
LEFT JOIN lab.SalesOrder AS o ON o.CustomerId = c.CustomerId WHERE o.OrderId IS NULL;Siparişsiz Selin bulunur.
Bu sayfa SQL çalıştırmaz. Örnekleri indirilebilir SqlStudioLab veritabanında, SSMS’de uygula. Geçici tablo örneklerini yeniden çalıştırırken yalnız ilgili #tabloyu temizle. VIEW, procedure ve function örnekleri lab’da kalıcı nesne oluşturur; üretim bağlantısı kullanma.
Önce kendin dene.
Her müşterinin sipariş sayısını, sıfırlar dahil göster.
Çözümü ve açıklamasını göster
SELECT c.CustomerId, COUNT(o.OrderId) AS Orders FROM lab.Customer AS c LEFT JOIN lab.SalesOrder AS o ON o.CustomerId = c.CustomerId GROUP BY c.CustomerId;Selin için 0, toplam müşteri satırı 6.