Etiketler

, , , , , ,


Verilerin birbirleriyle join işlemleri T-Sql de olsun PL-Sql de olsun sıkça yapılan işlemlerdendir. Fakat SQL öğrenmeye yeni başlayanlar için Left olsun Right olsun tam bir kargaşadır. Hangi durumda verinin nasıl geleceğini tahmin edememek aslında ciddi bir tehlikedir. Özellikle left join ile bağlanması gereken bir referans tablosunun yanlışlıkla inner join ile bağlanması sonucu, ana tabloda olan bir kodun referans tablosunda olmamasından dolayı, ana kaydın gelmemesi açıkcası çokça gözlemlediğim bir hatadır. Tabi bu bahsettiğim durum daha çok 1-1 ilişkisi olan tablolar için hassas bir konudur. Diğer durumlar için inner ya da left olması tamamen sizin ihtiyacınıza ve kurgunuza bağlı bir durumdur.

Join işlemlerini kolayca kavrayabilmeniz için durumu kümelerle ımantığıyla simüle ederek size aktarmayı uygun gördüm. Açıkcası zaman içersinde bu konuda sıkıntısı olduğunu hissettiğim arkadaşlara hep bu yolla konuyu anlatmayı tercih etmiştim. Netice bir matematikçiden de başka birşey beklenmek süpriz olurdu…

A ve B şeklinde 2 kümemiz olduğunu varsayalım.

  • A inner join B” kümelerde karşılığı keşişimdir. Yani sadece her iki tabloda da olan veriler gelir.
  • A left join B” kümelerde sol(left) tarafta olan küme demektir. Yani A tablosundaki veriler koşulsuz gelir, B tablosundan eşleştirebildiklerini (ki bu kısımlar kesişim bölümüne karşılık gelir) getirir, eşeşleştiremezse o alanları NULL olarak getirir.
  • “A right join B” kümelerde sağ(right ) tarafta olan küme demektir. Yani B tablosundaki veriler koşulsuz gelir, A tablosundan eşleştirebildiklerini (ki bu kısımlar kesişim bölümüne karşılık gelir) getirir, eşeşleştiremezse o alanları NULL olarak getirir.
  • A full join B” kümelerde birleşim karşılık gelir. Her iki kümedeki tüm elemanları getirir. Eşleştirebildiklerine ilgili tablolardaki değerleri, eşleştiremediklerini NULL olarak getirir.


INNER JOIN | KESİŞİM (A∩B)

inner join

LEFT JOIN | A KÜMESİ (A/B U A∩B)

left join

RIGHT JOIN | B KÜMESİ (B/A U A∩B)

FULL JOIN | BİRLEŞİM (AUB)


Örnekler için kullanılan scriptleri buradan indirebilirsiniz.


SQL ve IBM DB2‘un desteklemediği fakat, PostgreSQL, MySql ve Oracle tarafından desteklenen,  iki tablo arasında aynı isimde olan sütunları birbiriyle otomatik olarak bağlayan bir join çeşidi olan  “Natural Join” ile ilgili yazılarımı buradan okuyabilirsiniz.