Aynı Tablodaki Satırları Karşılaştırma
Çiftleri ve ilişkileri bulun.
Aynı Tablodaki Satırları Karşılaştırma, CoddyKit'te ücretsiz bir SQL Academy dersidir. Bu, 4 dersinin 3. 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.
Kendi Kendine JOIN Nedir
Kendi kendine JOIN, bir tabloyu yine kendisiyle birleştirmektir. İlk bakışta alışılmadık gelebilir; ancak aynı tablodaki satırları karşılaştırmak için güçlü bir tekniktir.
Her çalışanın aynı tablodaki başka bir satırı gösteren bir manager_id değerine sahip olduğu bir employees tablosu düşünün. Kendi kendine JOIN, tek bir sorguda her çalışanı yöneticisiyle eşleştirmenizi sağlar.
Örnek Tabloyu Hazırlama
Bu ders boyunca kullanmak üzere basit bir employees tablosu oluşturalım. Her satırda bir id, bir name, bir salary ve aynı tablodaki başka bir çalışanı gösteren bir manager_id bulunur.
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50),
salary INT,
manager_id INT
);
INSERT INTO employees VALUES
(1, 'Alice', 90000, NULL),
(2, 'Bob', 70000, 1),
(3, 'Carol', 65000, 1),
(4, 'Dave', 55000, 2),
(5, 'Eve', 60000, 2),
(6, 'Frank', 48000, 3);Temel Kendi Kendine JOIN Sözdizimi
Kendi kendine JOIN yapmak için aynı tabloya iki farklı diğer ad kullanarak iki kez başvurun. Diğer adlar, tablonun iki ayrı kopyasına sahipmişsiniz gibi davranır. Ardından bu iki kopyayı birbirine bağlayan JOIN koşulunu belirtin.
Burada employees tablosuna çalışan için e, yönetici için m diğer adlarını veriyor ve e.manager_id = m.id ifadesiyle eşleştiriyoruz.
SELECT
e.name AS employee,
m.name AS manager
FROM employees e
JOIN employees m ON e.manager_id = m.id;Üst Düzey Satırları LEFT JOIN ile Dahil Etme
Normal bir INNER JOIN, manager_id değeri NULL olan satırları çıkarır; bu nedenle en üst düzey çalışan Alice (CEO) sonuçların dışında kalır.
Yöneticisi olmayanlar da dahil olmak üzere her çalışanın görünmesi için LEFT JOIN kullanın. Bu çalışanların yönetici sütununda yalnızca NULL değeri gösterilir.
SELECT
e.name AS employee,
m.name AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id
ORDER BY m.name NULLS LAST, e.name;Bir Özelliği Paylaşan Çiftleri Bulma
Kendi kendine JOIN işlemleri aynı değeri paylaşan satır çiftlerini bulmak için de kullanışlıdır. Örneğin, aynı yöneticiye bağlı tüm çalışan çiftlerini bulabilirsiniz.
a.id < b.id koşulu, (Bob, Carol) ve (Carol, Bob) gibi yinelenen çiftlerin ikisinin birden sonuçlarda görünmesini önler.
SELECT
a.name AS employee_1,
b.name AS employee_2,
a.manager_id AS shared_manager
FROM employees a
JOIN employees b
ON a.manager_id = b.manager_id
AND a.id < b.id;Satırlar Arasındaki Maaşları Karşılaştırma
Sayısal değerleri satırlar arasında karşılaştırmak için kendi kendine JOIN kullanabilirsiniz. Aşağıdaki sorgu, maaşı kendi yöneticisinin maaşından yüksek olan her çalışanı bulur; bu, klasik bir analitik kontroldür.
SELECT
e.name AS employee,
e.salary AS emp_salary,
m.name AS manager,
m.salary AS mgr_salary
FROM employees e
JOIN employees m ON e.manager_id = m.id
WHERE e.salary > m.salary;Eşleşmesi Olmayan Satırları Bulma
LEFT JOIN ile birlikte WHERE ... IS NULL denetimi kullanan bir kendi kendine JOIN, eşleşen karşılığı olmayan satırları bulmanızı sağlar. Burada kendisine bağlı hiç çalışanı olmayan çalışanları, yani hiyerarşideki yaprak düğümleri buluyoruz.
SELECT e.name AS employee
FROM employees e
LEFT JOIN employees sub ON sub.manager_id = e.id
WHERE sub.id IS NULL
ORDER BY e.name;Doğrudan Bağlı Çalışanları Sayma
Tabloyu kendisiyle birleştirip yönetici tarafına göre gruplandırarak her yöneticinin doğrudan kendisine bağlı kaç çalışanı olduğunu sayabilirsiniz. Hiç bağlı çalışanı olmayan çalışanlar LEFT JOIN sayesinde dahil edilir.
SELECT
m.name AS manager,
COUNT(e.id) AS direct_reports
FROM employees m
LEFT JOIN employees e ON e.manager_id = m.id
GROUP BY m.id, m.name
ORDER BY direct_reports DESC;Kendi Kendine JOIN İşlemlerini Açıklığa Kavuşturmak İçin CTE Kullanma
Kendi kendine JOIN sorgusu karmaşıklaştığında, sorguyu bir Ortak Tablo İfadesi (CTE) içine almak mantığın okunmasını kolaylaştırır. Hiyerarşi için bir CTE tanımlayıp ardından bu CTE'yi anlaşılır biçimde sorgulayın.
WITH hierarchy AS (
SELECT
e.id AS emp_id,
e.name AS employee,
e.salary AS emp_salary,
m.name AS manager,
m.salary AS mgr_salary
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id
)
SELECT *
FROM hierarchy
WHERE mgr_salary IS NOT NULL
AND emp_salary > mgr_salary;Hiyerarşik Olmayan Bir Tabloda Kendi Kendine JOIN
Kendi kendine JOIN işlemleri yalnızca yönetici-çalışan hiyerarşileriyle sınırlı değildir. Aşağıdaki örnekte, öneri motorları veya benzerlik denetimleri için kullanışlı olan, aynı kategoriye ait tüm ürün çiftlerini bulmak üzere bir products tablosu kullanılır.
CREATE TABLE products (
id INT PRIMARY KEY,
name VARCHAR(50),
category VARCHAR(30)
);
INSERT INTO products VALUES
(1, 'Laptop', 'Electronics'),
(2, 'Phone', 'Electronics'),
(3, 'Tablet', 'Electronics'),
(4, 'Shirt', 'Clothing'),
(5, 'Jeans', 'Clothing');
SELECT
a.name AS product_1,
b.name AS product_2,
a.category
FROM products a
JOIN products b
ON a.category = b.category
AND a.id < b.id;Yaygın Hatalar: Kartezyen Çarpımlar ve Yinelenenler
Kendi kendine JOIN işlemlerinde sık yapılan iki hata, JOIN koşulunu tamamen unutmak ve a.id <> b.id yerine a.id < b.id kullanılması gereken yerde yinelenen çiftler oluşturmaktır.
JOIN koşulunuzun doğru olduğunu her zaman doğrulayın. Sıralı çiftlere değil, yalnızca sırasız çiftlere ihtiyacınız olduğunda <> yerine < kullanın.
-- Wrong: returns every ordered pair (A,B) AND (B,A)
SELECT a.name, b.name
FROM employees a
JOIN employees b ON a.manager_id = b.manager_id
AND a.id <> b.id;
-- Correct: returns each unordered pair once
SELECT a.name, b.name
FROM employees a
JOIN employees b ON a.manager_id = b.manager_id
AND a.id < b.id;Hızlı Kontrol
Öz birleştirmeleri ve aynı tablodaki satırları karşılaştırmayı anlayıp anlamadığınızı sınayın.
Ders Özeti
Bu derste, aynı tablo içindeki satırları karşılaştırmak için öz birleştirmeleri nasıl kullanacağınızı öğrendiniz.
Önemli noktalar:
- Veritabanının bunları ayrı kaynaklar olarak ele alması için tabloya iki kez takma ad verin (örneğin,
evem). - Yalnızca eşleşmesi olan satırlara ihtiyacınız olduğunda
INNER JOIN, eşleşmeyen satırları da dahil etmek istediğinizdeLEFT JOINkullanın. - Sırasız çiftlerin yinelenmesini önlemek için
a.id < b.idkullanın. - Öz birleştirmeler; hiyerarşilerde (yönetici/çalışan), benzerlik aramalarında (aynı kategori) ve aynı tablodaki iki satırın ilişkilendirilmesi gereken her türlü karşılaştırmada kullanılabilir.
- CTE'ler, karmaşık öz birleştirme sorgularının okunmasını ve bakımını çok daha kolaylaştırabilir.
Sıkça Sorulan Sorular
“Aynı Tablodaki Satırları Karşılaştırma” dersi ücretsiz mi?
Evet — “Aynı Tablodaki Satırları Karşılaştırma” 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.
“Aynı Tablodaki Satırları Karşılaştırma” dersinde ne öğreneceğim?
Çiftleri ve ilişkileri bulun. 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 3. dersidir.
“Aynı Tablodaki Satırları Karşılaştırma” 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ı