Üç veya Daha Fazla Tabloyu Birleştirme
Birleştirmeleri zincirlemeyi ve ara sonuç kümeleri hakkında akıl yürütmeyi öğrenin.
Üç veya Daha Fazla Tabloyu Birleştirme, CoddyKit'te ücretsiz bir Coding Interview Prep dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Coding Interview Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Coding Interview Prep kursu toplamda 4 dersten oluşur.
Birleştirmeler Zincirlenir, Dallanmaz
Gerçek mülakat problemleri nadiren iki tabloyla sınırlı kalır. Üç, dört veya daha fazla tabloyu birleştirmeniz istenir. Karmaşayı yatıştıran temel fikir şudur: çok tablolu birleştirme, yalnızca iki tablonun art arda birleştirilmesidir.
Veritabanı önce ilk iki tabloyu ara bir sonuçta birleştirir, sonra bu sonucu üçüncü tabloyla ve ardından diğerleriyle birleştirir. Bir birleştirme hakkında akıl yürütebiliyorsanız, bunlardan oluşan bir zincir hakkında da akıl yürütebilirsiniz.
Üç Tablolu Şema
Örneğimizi üçüncü bir tabloyla genişletiyoruz. Artık müşterilerimiz, onların siparişleri ve her siparişin ilişkilendirildiği ürünler var.
customers(id, name)orders(id, customer_id, product_id, amount)products(id, title)
Bunları iki ilişki birbirine bağlar: orders.customer_id = customers.id ve orders.product_id = products.id.
customers(id, name)
orders(id, customer_id, product_id, amount)
products(id, title)Temel Üç Tablolu Sorgu
JOIN işlemlerini art arda ekleyin. Her JOIN ... ON bir tablo ekler ve bu tablonun önceki kısma nasıl bağlandığını belirtir.
Sorguyu yukarıdan aşağıya okuyun: orders ile başlayın, eşleşen müşteriyi ekleyin, ardından eşleşen ürünü ekleyin. Böylece her sipariş satırı bir ad ve ürün başlığı kazanır.
SELECT c.name, p.title, o.amount
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN products p ON p.id = o.product_id;Ara Sonuç Kümeleriyle Düşünün
Çok tablolu JOIN işlemlerini kolaylaştıran zihinsel model şudur: her JOIN sonrasında, o ana kadarki ara sonucu gözünüzde canlandırın.
- 1. JOIN sonrasında: siparişler + müşteri sütunları.
- 2. JOIN sonrasında: bu sonuç + ürün sütunları.
Sonraki ON yan tümcesi, ara kümede o ana kadar bulunan tüm sütunlara başvurabilir; JOIN sırasının her ON içinde yazabileceklerinizi etkilemesinin nedeni budur.
Her ON Önceki Tabloları Görür
Önemli bir sonuç şudur: sonraki bir JOIN işleminin ON yan tümcesi, yalnızca eklenen tabloya değil, ondan önce JOIN işlemine katılmış herhangi bir tabloya başvurabilir.
Burada üçüncü JOIN işlemi, zaten kapsamda bulunan o (siparişler) ile bağlantı kurar. Dördüncü bir tabloyu c veya p ile de bağlayabilirsiniz; çünkü her ikisi de biriken sonucun zaten parçasıdır.
SELECT c.name, p.title, w.region
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN products p ON p.id = o.product_id
JOIN warehouses w ON w.id = o.warehouse_id; -- refers to oMerkez Tabloyla Başlayın
Canlı mülakatlar için pratik bir ipucu: FROM ifadesine olgu / merkez tabloyla başlayın (genellikle ilişkilerin ortasında bulunan tabloyla), ardından arama tablolarına doğru ilerleyin.
Siparişler ortada yer alır ve hem müşterilere hem de ürünlere ait yabancı anahtarları barındırır. Bu nedenle buradan başlamak, her ON yan tümcesinin basit kalmasını ve daha önce tanımlanan tablolara başvurmasını sağlar.
-- orders is central: it links to both sides
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN products p ON p.id = o.product_idDallanma Çoğalması Zincirler Boyunca Katlanır
Dallanma çoğalması hakkında öğrendiğiniz her şey hâlâ geçerlidir ve etkisi katlanır. Her siparişin birçok ürünü ve her ürünün birçok vergi satırı varsa, satır sayısı her adımda katlanır.
Çoklu JOIN sorgusunda bir toplama sonucu olması gerekenden büyük görünüyorsa, orta JOIN işlemlerinden biri tarafından oluşturulan bir dallanma çoğalmasından şüphelenin ve her JOIN işleminin ayrıntı düzeyini ayrı ayrı kontrol edin.
-- rows = orders * items_per_order * tax_rows_per_item
SELECT o.id
FROM orders o
JOIN order_items i ON i.order_id = o.id
JOIN item_taxes t ON t.item_id = i.id;Bir Zincirde JOIN Türlerini Karıştırma
Tek bir sorguda INNER ve LEFT JOIN işlemlerini birleştirebilirsiniz; ancak sıra önemlidir. Bir LEFT JOIN NULL değerleri ekledikten sonra, bu NULL sütunlarına başvuran sonraki bir INNER JOIN korunan satırları eleyebilir.
Burada bir müşterinin siparişi yoksa LEFT JOIN müşteriyi product_id değeri NULL olarak korur; ardından products tablosuna yapılan INNER JOIN müşteriyi yeniden eler. Baskı altında yapılması kolay bir hatadır.
SELECT c.name, p.title
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
JOIN products p ON p.id = o.product_id;
-- the INNER products join can cancel the LEFT JOINDış JOIN İşlemlerini Dış Olarak Korumak
Siparişi olmayan müşterileri sonuna kadar korumak için sonraki JOIN işlemini de LEFT yapın. Böylece NULL değerleri güvenle sona kadar ilerler.
Pratik kural: Bir kez dış JOIN kullanmaya başladıysanız, isteğe bağlı daldan gelen her tablo için dış JOIN kullanmaya devam edin.
SELECT c.name, p.title
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
LEFT JOIN products p ON p.id = o.product_id;
-- customers with no orders are now kept (NULL title)Ölçek Büyüdükçe Takma Adlar Zorunlu Olur
Dört veya beş tablolu sorgularda bazı tablolar id, name veya created_at gibi sütun adlarını paylaşabilir. Kısa ve tutarlı takma adlar belirsizliği önler ve sorgunun okunabilirliğini korur.
Tabloyu çağrıştıran takma adlar seçin (c, o, p) ve her sütunun hangi tabloya ait olduğunu belirtin. Mülakat yapanlar, takma ad kullanımınızı üretim SQL'i yazma biçiminizin bir göstergesi olarak değerlendirir.
SELECT c.id AS customer_id,
o.id AS order_id,
p.id AS product_id,
p.title
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN products p ON p.id = o.product_id;Çoka Çok İlişkiler için Köprü Tabloları
İki varlık arasında çoka çok ilişki olduğunda, üçüncü bir ara (köprü) tablo bu ikisinin arasında yer alır ve bağlantıyı bu tablo üzerinden kurarsınız. Öğrenciler ve dersler, kayıtlar aracılığıyla birbirine bağlanır.
Bir köprü tablosu üzerinden ilerlemeniz gerektiğini fark etmek, mülakatlarda sık aranan bir işarettir.
SELECT s.name, c.title
FROM students s
JOIN enrollments e ON e.student_id = s.id
JOIN courses c ON c.id = e.course_id;Hızlı Kontrol
Karışık JOIN işlemlerinden oluşan bir zinciri değerlendirin.
Özet: Üç veya Daha Fazla Tabloyu JOIN İşlemleriyle Birleştirme
Mülakatta şunları aklınızda tutun:
- Çok tablolu bir JOIN, iki tablolu JOIN işlemleri zinciridir; her adımdan sonra oluşan ara sonucu değerlendirin.
- Daha sonraki bir ON yan tümcesi, zincirdeki önceki herhangi bir tabloya başvurabilir.
- Merkez tablodan başlayıp arama tablolarına doğru ilerleyin.
- Dallanma çoğalması JOIN işlemleri boyunca katlanır; her adımda ayrıntı düzeyini kontrol edin.
- Bir LEFT JOIN işleminden sonraki INNER JOIN onu etkisiz bırakabilir; isteğe bağlı satırları korumak için dış JOIN kullanmaya devam edin.
- Çoka çok ilişkiler, köprü tablosu üzerinden JOIN işlemiyle bağlanır.
Sıkça Sorulan Sorular
“Üç veya Daha Fazla Tabloyu Birleştirme” dersi ücretsiz mi?
Evet — “Üç veya Daha Fazla Tabloyu Birleştirme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Coding Interview Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Coding Interview Prep kursu toplamda 4 dersten oluşur.
“Üç veya Daha Fazla Tabloyu Birleştirme” dersinde ne öğreneceğim?
Birleştirmeleri zincirlemeyi ve ara sonuç kümeleri hakkında akıl yürütmeyi öğrenin. Coding Interview Prep ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Coding Interview Prep öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Coding Interview Prep, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Üç veya Daha Fazla Tabloyu Birleştirme” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Coding Interview Prep dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Coding Interview Prep dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- INNER JOIN Satırları Nasıl Eşleştirir?
- Birleştirmelerde ON ve WHERE
- Birleştirme Yayılması ve Satır Çoğalması
- Üç veya Daha Fazla Tabloyu Birleştirme