Kendi Kendine Birleştirme Nedir
Bir tabloyu diğer adlar kullanarak kendisiyle birleştirin.
Kendi Kendine Birleştirme Nedir, CoddyKit'te ücretsiz bir SQL Academy dersidir. Bu, 4 dersinin 1. 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 Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Academy kursu toplamda 4 dersten oluşur.
Tabloyu Kendisiyle JOIN Etme
Kendi kendine JOIN, bir tabloyu yine kendisiyle birleştirme işlemidir. İlk bakışta alışılmadık gelebilir; ancak tek bir tablodaki satırlar aynı tablodaki diğer satırlarla ilişkili olduğunda kullanılan güçlü bir tekniktir.
En yaygın örnek, her çalışan satırında yöneticisinin ID'sinin de saklandığı çalışanlar tablosudur. Bu yönetici de aynı tablodaki çalışanlardan biridir.
Çalışanlar Tablosu
Her satırında id, name ve aynı tablodaki başka bir satırı gösteren manager_id bulunan bir employees tablosunu ele alalım.
Bu yapıya kendine başvuran veya özyinelemeli ilişki adı verilir. Tabloyu oluşturup verilerle doldurmak için aşağıdaki sorguyu çalıştırın.
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50),
manager_id INT
);
INSERT INTO employees VALUES
(1, 'Alice', NULL),
(2, 'Bob', 1),
(3, 'Carol', 1),
(4, 'Dave', 2),
(5, 'Eve', 2),
(6, 'Frank', 3);Normal JOIN İşlemleri Burada Neden Çalışmaz
Her çalışanı yöneticisinin adıyla birlikte görüntülemek istediğinizde, her iki veri de aynı tabloda bulunur. Normal bir JOIN, iki farklı tabloyu veya en azından iki farklı kaynağı birbirine bağlar.
Aynı tablodan biri çalışan, diğeri yönetici için olmak üzere iki kez okumak için, tablo diğer adlarıyla birlikte bir kendi kendine JOIN kullanmanız gerekir.
Diğer Adları Tanıtma
Kendi kendine JOIN gerçekleştirmek için FROM / JOIN yan tümcesinde aynı tablo adını iki kez yazar ve her kullanımına farklı bir diğer ad verirsiniz. Diğer adlar, SQL'in bunları mantıksal olarak iki ayrı tablo gibi ele almasını sağlar.
Çalışan için e, employee; yönetici için m, manager gibi kısa ve açıklayıcı diğer adlar kullanmak yaygın bir yaklaşımdır.
-- Conceptual structure (not yet a full query)
-- FROM employees AS e
-- JOIN employees AS m ON e.manager_id = m.idİlk Kendi Kendine JOIN İşleminiz
Aşağıda her çalışanı yöneticisinin adıyla birlikte listeleyen eksiksiz bir kendi kendine JOIN örneği verilmiştir. ON koşulu, çalışanın manager_id değerini yöneticinin id değeriyle ilişkilendirir.
Alice'in yöneticisi olmadığı için INNER JOIN tarafından sonuçların dışında bırakılır; yönetici tarafında eşleşen bir satırı yoktur.
SELECT
e.name AS employee,
m.name AS manager
FROM employees AS e
INNER JOIN employees AS m
ON e.manager_id = m.id;Yöneticisi Olmayan Satırları Dahil Etme
INNER JOIN kullandığınızda eşleşmesi olmayan satırlar sonuçlardan çıkarılır. Alice'in manager_id = NULL olduğu için sonuçlarda görünmez.
Tüm çalışanları korumak ve yöneticisi olmadığında yalnızca NULL veya bir etiket göstermek için LEFT JOIN kullanın.
SELECT
e.name AS employee,
COALESCE(m.name, 'No Manager') AS manager
FROM employees AS e
LEFT JOIN employees AS m
ON e.manager_id = m.id;Kendi Kendine JOIN Sonuçlarını Filtreleme
Diğer sorgularda olduğu gibi kendi kendine JOIN işlemine bir WHERE yan tümcesi ekleyebilirsiniz. Aşağıdaki örnek, doğrudan yöneticisi Alice olan çalışanları getirir (id = 1).
SELECT
e.name AS employee,
m.name AS manager
FROM employees AS e
INNER JOIN employees AS m
ON e.manager_id = m.id
WHERE m.name = 'Alice';Doğrudan Bağlı Çalışanları Sayma
Kendi kendine JOIN işlemleri toplama işlevleriyle doğal biçimde birlikte kullanılabilir. Aşağıdaki sorgu, yönetici diğer adına göre gruplama yaparak her yöneticinin doğrudan kendisine bağlı kaç çalışanı olduğunu sayar.
SELECT
m.name AS manager,
COUNT(e.id) AS direct_reports
FROM employees AS e
INNER JOIN employees AS m
ON e.manager_id = m.id
GROUP BY m.name
ORDER BY direct_reports DESC;Hiyerarşik Olmayan Verilerde Kendi Kendine JOIN
Kendi kendine JOIN işlemleri yalnızca hiyerarşilerle sınırlı değildir. Bir tablodaki satırlar aynı tablodaki diğer satırlarla ilişkili olduğunda kendi kendine JOIN yardımcı olabilir.
Örneğin, aynı yöneticiyi paylaşan tüm çalışan çiftlerini bulabilirsiniz. Bunun için tabloyu eşleşen manager_id değerleri üzerinden kendisiyle birleştirirken bir çalışanın kendisiyle eşleştirilmemesini sağlamanız gerekir.
SELECT
a.name AS employee_1,
b.name AS employee_2,
a.manager_id
FROM employees AS a
INNER JOIN employees AS b
ON a.manager_id = b.manager_id
AND a.id < b.id;Diğer Adın Rolü
Kendi kendine JOIN işleminde diğer adlar zorunludur; bunlar olmadan veritabanı her sütun başvurusunun tablonun hangi kopyasına ait olduğunu belirleyemez ve bir belirsizlik hatası alırsınız.
İstediğiniz diğer adları kullanabilirsiniz. Temel kural, SQL'in tablonun hangi örneğine bakacağını bilmesi için her sütun başvurusunun doğru diğer adla başlamasıdır.
-- This will fail: column 'name' is ambiguous
-- SELECT name FROM employees JOIN employees ON manager_id = id;
-- This works: aliases remove the ambiguity
SELECT e.name, m.name
FROM employees AS e
JOIN employees AS m ON e.manager_id = m.id;Gerçek Hayattaki Kullanım Alanları
Kendi kendine JOIN işlemleri gerçek veritabanlarında sıkça görülür. Yaygın kullanım alanları şunlardır:
- Organizasyon şemaları — çalışanlar ve yöneticileri
- Kategori ağaçları — üst ve alt kategoriler
- Malzeme listeleri — başka bileşenlerden oluşan bileşenler
- Sosyal ağlar — tek bir bağlantılar tablosunda arkadaşların arkadaşlarını bulma
Bir şemada kendine başvuran bir yabancı anahtar tanımak, kendi kendine JOIN gerekebileceğine dair ilk ipucudur.
Kısa Sınama
Devam etmeden önce kendi kendine JOIN konusundaki anlayışınızı sınayın.
Ders Özeti
Bu derste kendi kendine JOIN işleminin ne olduğunu ve ne zaman kullanılacağını öğrendiniz:
- Kendi kendine JOIN, bir tabloyu farklı diğer adlarla iki kez başvurarak yine kendisine bağlar
- Eşleşmesi olmayan satırları (örneğin en üst düzey yöneticileri) dışlamak için
INNER JOIN, bunları korumak içinLEFT JOINkullanın WHERE,GROUP BYve toplama işlevlerini diğer tüm JOIN işlemlerinde olduğu gibi ekleyin- Aynı tablodaki satırları karşılaştırırken yinelenen çiftleri önlemek için
a.id < b.idifadesiniONyan tümcesinde kullanın - Kendi kendine JOIN, hiyerarşik veriler, kategori ağaçları ve kendine başvuran her türlü ilişki için başvurulacak araçtır
Sırada: özyinelemeli CTE'lerle çok düzeyli hiyerarşileri inceleme.
Sıkça Sorulan Sorular
“Kendi Kendine Birleştirme Nedir” dersi ücretsiz mi?
Evet — “Kendi Kendine Birleştirme Nedir” 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 Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Academy kursu toplamda 4 dersten oluşur.
“Kendi Kendine Birleştirme Nedir” dersinde ne öğreneceğim?
Bir tabloyu diğer adlar kullanarak kendisiyle birleştirin. SQL Academy 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 Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te SQL Academy, 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 1. dersidir.
“Kendi Kendine Birleştirme Nedir” 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 Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her SQL Academy 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
- Kendi Kendine Birleştirme Nedir
- Çalışanlar ve Yöneticiler
- Aynı Tablodaki Satırları Karşılaştırma
- Kendi Kendine Birleştirmelerin Sınırları