Ana içeriğe geç

SQL JOIN

Okunuşu
es-kyu-el coyn ya da sikuıl coyn
Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/sql-join

Kısaca

SQL JOIN, iki ya da daha fazla tablonun satırlarını yabancı anahtar gibi ilişkili sütunlar üzerinden eşleştirerek tek bir sonuçta birleştiren sorgu işlemidir.

SQL JOIN nedir?

JOIN, birkaç tabloya yayılmış veriyi tek bir sonuçta birleştirir. İyi tasarlanmış bir ilişkisel veritabanında müşteriler ve siparişleri ayrı tablolarda yaşar; JOIN, bir tablodaki orders.customer_id gibi bir sütunu diğerindeki customers.id gibi bir sütunla karşılaştırarak her siparişi müşterisiyle eşleştirir. Hangi satırların eşleşeceğine karar veren koşul ON anahtar sözcüğünden sonra yazılır.

Birkaç tür JOIN vardır. INNER JOIN (yalnızca JOIN yazdığınızda elde ettiğiniz), yalnızca her iki tabloda da eşleşmesi olan satırları döndürür. LEFT JOIN, sol tablonun her satırını ve sağdan eşleşenleri döndürür, boşlukları NULL ile doldurur; RIGHT JOIN bunun tersini yapar, FULL OUTER JOIN iki taraftaki eşleşmeyen satırları da tutar ve CROSS JOIN bir tablonun her satırını diğerinin her satırıyla eşler.

Bir parti için iki davetli listesi düşünün: inner join yalnızca her iki listede de yer alan kişileri listeler; left join ise ilk listedeki herkesi listeler ve kimlerin ikinci listede de olduğunu not eder. JOIN'ler ayrıca normalizasyonu pratik kılan şeydir; çünkü veri tekrar olmadan bir kez saklanabilir ve sorgu zamanında yeniden bir araya getirilebilir.

Yaygın bir hata, left join gerekirken inner join kullanmaktır; bu, örneğin hiç sipariş vermemiş müşterileri sessizce eler. Bir diğeri eksik ya da yanlış birleştirme koşuludur; satırları çoğaltır ve toplamları şişirir. JOIN ayrıca UNION'dan farklıdır: JOIN, eşleşen satırların sütunlarını yan yana koyar; UNION ise iki sorgunun satırlarını üst üste dizer.

Bir bakışta

customers ve orders tabloları orders.customer_id = customers.id üzerinden birleştirilir: INNER JOIN, Ada'yı iki kez ve Linus'u bir kez döndürür; LEFT JOIN ise hiç siparişi olmayan Grace'i de NULL ile tutar.customersnameidAda1Linus2Grace3orderscustomer_idtotal130115250ON orders.customer_id = customers.idINNER JOINnametotalAda30Ada15Linus50GraceNULLyalnızca LEFT JOIN'de
INNER JOIN yalnızca iki tabloda da eşleşen satırları tutar. LEFT JOIN ayrıca sol tablonun her satırını tutar ve boşlukları NULL ile doldurur.

Önemli noktalar

  • JOIN, bir eşleşme koşuluna göre birden fazla tablonun satırlarını birleştirir.
  • INNER JOIN yalnızca iki tabloda da eşleşen satırları tutar.
  • LEFT JOIN sol tablonun her satırını tutar; eşleşme olmayan yerlerde NULL bulunur.
  • Birleştirmeler genellikle yabancı anahtar ilişkilerini izler.
  • Büyük tablolarda birleştirmeleri hızlı tutmak için birleştirme sütunlarını indeksleyin.

Örnek

INNER JOIN ile LEFT JOIN karşılaştırmasısql
-- INNER JOIN: only customers who have placed at least one order
SELECT c.name, o.id AS order_id, o.total
FROM customers AS c
INNER JOIN orders AS o ON o.customer_id = c.id;

-- LEFT JOIN: every customer, including those with no orders (count 0)
SELECT c.name, COUNT(o.id) AS order_count
FROM customers AS c
LEFT JOIN orders AS o ON o.customer_id = c.id
GROUP BY c.id, c.name;

Sık sorulan sorular

INNER JOIN ile LEFT JOIN arasındaki fark nedir?

INNER JOIN yalnızca her iki tabloda da eşleşmesi olan satırları döndürür. LEFT JOIN ise sol tablonun tüm satırlarını döndürür ve eşleşme olmadığında sağ tablonun sütunlarını NULL ile doldurur.

SQL JOIN'ler yavaş mıdır?

Birleştirme sütunları indeksliyse hayır; veritabanları milyonlarca satırı verimli biçimde birleştirmek için yapılmıştır. Birleştirmeler, bu sütunlarda indeks yoksa, bir sorgu çok sayıda büyük tabloyu birleştiriyorsa ya da eksik bir koşul çok büyük sayıda satır kombinasyonu ürettiğinde yavaşlar.

Self join nedir?

Self join, bir tabloyu iki farklı takma adla (alias) kendisiyle birleştirir. Her satırın başka bir çalışana işaret eden bir manager_id değerine sahip olduğu bir employees tablosu gibi hiyerarşik veriler için kullanışlıdır.

İlgili sayfalar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar