İlişkiler ve JOIN
INNER JOIN ve doğru eşleştirme
İlişkileri kullanarak veriyi birleştir.
Kavramı anlayalım
INNER JOIN yalnız eşleşen satır çiftlerini döndürür. ON, hangi anahtarların ilişkiyi kurduğunu belirtir. Bir müşterinin üç siparişi varsa müşteri kaydı sonuçta üç satırda görünür; bu bir kopyalama hatası değil, bir-çok ilişkinin sonucudur.
Tablo takma adları aynı isimdeki sütunları açıkça ayırır. Önce ilişki anahtarını, sonra sonuç grain’ini belirle. Müşteri başına bir satır istiyorsan siparişleri ayrıca grupla; JOIN’in bunu otomatik yapmasını bekleme.
JOIN koşulunda aynı isimli sütunları otomatik eşitleme: ProductId ile CustomerId ikisi de integer olabilir ama farklı varlıkları temsil eder. Anahtarların iş anlamını kontrol et. Testte eşleşen ve eşleşmeyen kayıtların sayısını ayrı ayrı doğrula.
Siparişleri müşteri bilgisi veya kalemleri ürün adıyla göstermek için.
ON koşulunu eksik bırakmak veya çoğalmayı anlamadan DISTINCT eklemek.
Aynı konu. Üç farklı derinlik.
SELECT o.OrderId, c.FullName FROM lab.SalesOrder AS o
INNER JOIN lab.Customer AS c ON c.CustomerId = o.CustomerId ORDER BY o.OrderId;12 sipariş satırı döner; her siparişin geçerli bir müşterisi vardır.
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.
101 numaralı siparişin müşterisini ve ürün adlarını birlikte getir.
Çözümü ve açıklamasını göster
SELECT c.FullName, p.ProductName FROM lab.SalesOrder AS o JOIN lab.Customer AS c ON c.CustomerId = o.CustomerId JOIN lab.OrderItem AS i ON i.OrderId = o.OrderId JOIN lab.Product AS p ON p.ProductId = i.ProductId WHERE o.OrderId = 101;Ada iki satırda görünür, çünkü siparişte iki ürün kalemi vardır.