SQL SELF JOIN ile Aynı Tabloyu Birleştirme

0 Yanıt 4 Görüntülenme
Puanlayanlar
Katılımcılar
Konuyu Açan #1
SQL SELF JOIN ile Aynı Tabloyu Birleştirme

SQL’de veri tabanlarında sıkça karşılaşılan durumlardan biri, aynı tabloyu kullanarak farklı satırlar arasında ilişki kurmaktır. Bu işlemi gerçekleştirmek için kullanılan yöntemlerin başında SELF JOIN gelir. SELF JOIN, adından da anlaşılacağı üzere, bir tablonun kendisiyle join edilmesi anlamına gelir ve özellikle hiyerarşik veya ilişkisel veri yapılarında oldukça kullanışlıdır.

SELF JOIN kullanırken, temel amaç genellikle, tablodaki satırların birbirleriyle ilişkili olup olmadığını veya belirli bir hiyerarşiyi ortaya koymaktır. Mesela, çalışanlar tablosunda, her çalışanın yöneticisini bulmak veya organizasyon şemasını göstermek istediğinizde, aynı tabloyu iki kez kullanarak, bir bağlantı kurabilirsiniz.

Örnek olarak, çalışanlar tablosunda ‘id’, ‘isim’ ve ‘yonetici_id’ alanları olduğunu varsayalım. Burada, ‘yonetici_id’ alanı, çalışanın yöneticisinin ‘id’sine referans verir. Bu durumda, çalışanların isimleri ile yöneticilerinin isimlerini birlikte göstermek için şu sorguyu yazabiliriz:

KOD
12345678sql
SELECT 
    c.isim AS Calisan,
    y.isim AS Yonetici
FROM 
    calisanlar c
LEFT JOIN 
    calisanlar y ON c.yonetici_id = y.id;


Burada, ‘calisanlar’ tablosu iki kez kullanıldı: biri ‘c’ takma adıyla, diğeri ‘y’ takma adıyla. Bu sayede, her çalışanın yöneticisinin bilgisine ulaşabiliyoruz. LEFT JOIN kullanarak, yöneticisi olmayan çalışanların da listede görünmesini sağladık.

Self join, sadece hiyerarşik yapılar değil, aynı zamanda zaman serileri, ilişkili ürünler veya başka karşılaştırmalı analizlerde de kullanılabilir. Bu teknik, veri modelleme açısından oldukça güçlü ve esnektir.

Kullanım alanlarını ve örnekleriyle anlatımı genişleten SELF JOIN’un, özellikle karmaşık veri ilişkilerini çözmede temel araçlardan biri olduğunu görmek mümkündür.

Bu konuya dair kendi deneyimleriniz veya kullanım alanlarınız varsa, detaylı örneklerle paylaşmak faydalı olacaktır.

Yanıt vermek için giriş yapmış olmalısınız.

0 alıntı seçildi