0Pricing
SQL Academy · Ders

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, e ve m).
  • Yalnızca eşleşmesi olan satırlara ihtiyacınız olduğunda INNER JOIN, eşleşmeyen satırları da dahil etmek istediğinizde LEFT JOIN kullanın.
  • Sırasız çiftlerin yinelenmesini önlemek için a.id < b.id kullanı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

  1. Kendi Kendine Birleştirme Nedir
  2. Çalışanlar ve Yöneticiler
  3. Aynı Tablodaki Satırları Karşılaştırma
  4. Kendi Kendine Birleştirmelerin Sınırları
← SQL Academy Sayfasına Dön