Hiyerarşiler için SELF JOIN
Çalışan-yönetici ve üst-alt ilişkilerini modellemek için bir tabloyu kendisiyle birleştirin.
Hiyerarşiler için SELF JOIN, CoddyKit'te ücretsiz bir SQL Interview Prep dersidir. Bu, 4 dersinin 2. 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, SQL Interview Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Interview Prep kursu toplamda 4 dersten oluşur.
SELF JOIN Gerçekte Nedir
Kendi kendine birleştirme, bir tablonun her iki tarafta da yer aldığı birleştirmeden ibarettir. Özel bir SELF JOIN anahtar sözcüğü yoktur; normal bir INNER veya LEFT JOIN yazıp aynı tabloya iki kez başvurursunuz.
Bu yöntemi mümkün kılan püf noktası tablo takma adlarıdır. Her kopyaya farklı bir takma ad vererek, motorun bunları birbirinden bağımsız iki tablo olarak işlemesini sağlarsınız.
SELECT e.name, m.name AS manager
FROM employees e
JOIN employees m ON e.manager_id = m.id;Takma Adlar Neden Zorunludur
Farklı takma adlar olmadan sorgu belirsizdir: her sütun adı iki kez görünür ve motor hangi kopyayı kastettiğinizi anlayamaz. Her örneğe takma ad vermek bu sorunu çözer.
Birleştirmeyi 'her çalışan satırını, yöneticisi olan çalışan satırıyla eşleştir' şeklinde okuyunuz. e takma adı çalışanı, m takma adı yöneticiyi temsil eder; her ikisi de aynı fiziksel tablodan gelir.
-- e = the employee, m = that employee's manager
SELECT e.id, e.name, m.name AS reports_to
FROM employees AS e
JOIN employees AS m ON e.manager_id = m.id;Çalışan-Yönetici Modeli
Klasik kendi kendine birleştirme senaryosu bir komşuluk listesidir: tek bir tablo satırları depolar ve her satır, aynı tabloya ait bir yabancı anahtar aracılığıyla üst öğesine işaret eder.
employees tablosundaki manager_id sütununun employees.id sütununa başvurması, bir kuruluş şemasının tamamını tek tabloda modeller. Her yönetici yalnızca başka bir çalışan satırıdır.
-- One table holds the whole hierarchy
-- employees(id, name, manager_id)
-- manager_id -> employees.idHerkesi Yöneticisiyle Birlikte Listeleme
En sık sorulan kendi kendine birleştirme sorusu şudur: her çalışanın yanında yöneticisinin adını gösteriniz. Çalışan kopyasını yönetici kopyasıyla e.manager_id = m.id koşuluna göre birleştiriniz.
Bu, yöneticisi mevcut olan çalışan başına bir satır döndürür. Kuruluşun en üstündeki CEO'nun NULL manager_id değerine sahip olduğunu ve iç birleştirme tarafından dışarıda bırakılacağını unutmayınız.
SELECT e.name AS employee, m.name AS manager
FROM employees e
JOIN employees m ON e.manager_id = m.id;Ağacın Tepe Noktasını Korumak İçin LEFT JOIN
manager_id değeri NULL olan CEO'yu da dahil etmek için LEFT JOIN kullanınız. Çalışan tarafı korunur; üst öğesi olmayan satırlarda yönetici sütunları NULL olarak döner.
Mülakat yapanlar bunu, bir iç kendi kendine birleştirmenin kök düğümleri düşürdüğünü hatırlayıp hatırlamadığınızı sınamak için kullanır. Çözüm, dış birleştirmelerdeki 'eşleşmeyen satırları koru' durumunda olduğu gibidir.
SELECT e.name AS employee,
COALESCE(m.name, '(top level)') AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;Her Yöneticiye Doğrudan Raporlayanları Sayma
Sık gelen devam sorusu şudur: her yöneticiye doğrudan raporlayan kaç kişi var? Kendi kendine birleştirme yapıp ardından yöneticiye göre gruplayınız.
Çalışanları yöneticilerle birleştirir, yöneticinin kimliğine göre gruplar ve çalışanları sayarız. Bu yalnızca doğrudan raporlayanları, altlarındaki tüm alt ağacı değil, sayar.
SELECT m.name AS manager, COUNT(*) AS direct_reports
FROM employees e
JOIN employees m ON e.manager_id = m.id
GROUP BY m.id, m.name
ORDER BY direct_reports DESC;İki Düzey Derine İnmek
Bir çalışanı, yöneticisini ve yöneticisinin yöneticisini elde etmek için tablonun üç kopyasını zincirleyiniz. Her düzey başka bir kendi kendine birleştirmedir.
Bu yöntem sabit ve bilinen bir derinlik için işe yarar. Keyfi bir derinliğe ihtiyacınız varsa kendi kendine birleştirme yeterli değildir; bu, mülakat yapanların belirtmenizi beklediği özyinelemeli CTE'ye işarettir.
SELECT e.name AS employee,
m.name AS manager,
g.name AS grand_manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id
LEFT JOIN employees g ON m.manager_id = g.id;Kendi Kendine Birleştirme ile Özyinelemeli CTE Karşılaştırması
Mülakat yapanların sınadığı temel ayrım:
- Bir kendi kendine birleştirme sabit sayıda düzeyi işler. Üç kopya = üç düzey, daha fazlası değil.
- Bir özyinelemeli CTE, yeni satır kalmayana kadar tabloyu kendisiyle yeniden birleştirerek sınırsız derinliği işler.
Bu nedenle 'her çalışanı ve doğrudan yöneticisini göster' ifadesi kendi kendine birleştirme gerektirirken, 'zincir boyunca her üst öğeyi listele' ifadesi özyineleme gerektirir.
Üst Öğe-Alt Öğe Kategorileri
Aynı örüntü her türlü ağacı modeller: ürün kategorileri, yorum dizileri ve coğrafi bölgeler. Kendi id sütununa başvuran bir categories tablosundaki parent_id sütunu, çalışan-yönetici örneğiyle aynı yapıdadır.
'Kendi kendisine başvuran yabancı anahtara sahip bir tablo' ifadesinin 'kendi kendine birleştirme veya özyineleme' anlamına geldiğini fark etmek, yeniden kullanılabilir bir içgörüdür.
SELECT c.name AS category,
p.name AS parent_category
FROM categories c
LEFT JOIN categories p ON c.parent_id = p.id;Yaygın Kendi Kendine Birleştirme Hataları
Mülakatlarda şunlara dikkat ediniz:
- Takma adları unutup belirsiz sütun hatalarına neden olmak.
INNER JOINkullanıp kök satırları sessizce düşürmek (NULL üst öğe).- Yanlış yönde birleştirmek:
e.manager_id = m.idyerinee.id = m.manager_idkullanmak.
ON koşulunu yazmadan önce hangi takma adın alt öğe, hangisinin üst öğe olduğunu daima yüksek sesle belirtiniz.
Kendi Kendine Birleştirme Ne Zaman Kullanılır
Bir tablo satırları aynı tablodaki diğer satırlarla ilişkilendirdiğinde kendi kendine birleştirmeye başvurunuz:
- Tek bir sabit düzeyde arama içeren hiyerarşiler (çalışan-yönetici).
- Tek bir tablonun satırlarını eşleştirme veya karşılaştırma (bir sonraki derste ele alınacaktır).
İlişki özyinelemeli ve sınırsızsa, daha iyi araç olarak özyinelemeli CTE'yi belirtiniz. Bu incelik, başlangıç düzeyindeki geliştiricileri orta düzeydekilerden ayırır.
Hızlı Kontrol
Hiyerarşilerdeki kendi kendine birleştirmeleri kavrayışınızı sınayınız.
Özet: Hiyerarşiler için SELF JOIN
Önemli çıkarımlar:
- Kendi kendine birleştirme, her iki tarafında da aynı tablonun bulunduğu ve takma adlarla ayırt edilen normal bir birleştirmedir.
- Bir komşuluk listesi (
manager_idgibi kendi kendisine başvuran yabancı anahtar), tek tabloda bir ağacı modeller. - Eşleşen çiftler için
INNER JOIN, NULL üst öğelere sahip kök satırları korumak içinLEFT JOINkullanınız. - Kendi kendine birleştirmeler sabit bir derinliği işler; sınırsız dolaşım için özyinelemeli CTE gerekir.
Sıkça Sorulan Sorular
“Hiyerarşiler için SELF JOIN” dersi ücretsiz mi?
Evet — “Hiyerarşiler için SELF JOIN” 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 SQL Interview Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Interview Prep kursu toplamda 4 dersten oluşur.
“Hiyerarşiler için SELF JOIN” dersinde ne öğreneceğim?
Çalışan-yönetici ve üst-alt ilişkilerini modellemek için bir tabloyu kendisiyle birleştirin. SQL 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.
SQL Interview Prep öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te SQL 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 2. dersidir.
“Hiyerarşiler için SELF JOIN” 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 SQL Interview Prep dersinde kod yazıp çalıştırabilir miyim?
Evet. Her SQL 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
- CROSS JOIN ve Kartezyen Çarpımlar
- Hiyerarşiler için SELF JOIN
- Tek Bir Tablo İçindeki Satırları Karşılaştırma
- Doğru Birleştirme Türünü Seçme