İçeriğe geç

SQL Alt Sorgu (Subquery) ve CTE Kullanımı: Karmaşık Sorguları Basitleştirin

28.08.2024 2,964 okunma

Alt Sorgu (Subquery) Nedir?

SQL'de alt sorgu (subquery), başka bir SQL ifadesinin içine yerleştirilen SELECT sorgusudur. Alt sorgular WHERE, FROM veya SELECT kısımlarında kullanılabilir ve karmaşık veri analizi ihtiyaçlarını karşılar. Büyük veri setlerinde doğru kullanılmayan subqueryler performans sorunlarına yol açabileceğinden dikkatli tasarlanmalıdır.

WHERE Kısmında Alt Sorgu

-- Ortalama satısın üzerindeki ürünleri getir
SELECT UrunAdi, Fiyat
FROM Urunler
WHERE Fiyat > (SELECT AVG(Fiyat) FROM Urunler);

FROM Kısmında Alt Sorgu (Derived Table)

-- Musterilerin toplam siparisi ve ortalama siparis tutarı
SELECT MusteriID, ToplamSiparis, OrtalamaTutar
FROM (
    SELECT MusteriID, COUNT(*) AS ToplamSiparis, AVG(Tutar) AS OrtalamaTutar
    FROM Siparisler
    GROUP BY MusteriID
) AS MusteriOzeti
WHERE ToplamSiparis > 5;

CTE (Common Table Expression) Nedir?

CTE, WITH anahtar kelimesiyle tanımlanan geçici sonuç kümesidir. Subquery'ye göre avantajları: okunabilirlik, tekrar kullanılabilirlik ve özyinelemeli sorgular (recursive CTE) yazabilme.

WITH AylikSatislar AS (
    SELECT YEAR(Tarih) AS Yil, MONTH(Tarih) AS Ay, SUM(Tutar) AS ToplamSatis
    FROM Siparisler
    GROUP BY YEAR(Tarih), MONTH(Tarih)
)
SELECT Yil, Ay, ToplamSatis,
       LAG(ToplamSatis) OVER (ORDER BY Yil, Ay) AS OncekiAy,
       ToplamSatis - LAG(ToplamSatis) OVER (ORDER BY Yil, Ay) AS Degisim
FROM AylikSatislar;

Recursive CTE

Özyinelemeli CTE hiyerarşik verilerde (organizasyon şeması, ürün kategorileri) güçlüdür:

WITH OrgSema AS (
    SELECT CalisanID, Ad, ManagerID, 0 AS Seviye
    FROM Calisanlar WHERE ManagerID IS NULL
    UNION ALL
    SELECT c.CalisanID, c.Ad, c.ManagerID, os.Seviye + 1
    FROM Calisanlar c JOIN OrgSema os ON c.ManagerID = os.CalisanID
)
SELECT * FROM OrgSema ORDER BY Seviye;

Performans Karşılaştırması

Korelasyonlu (correlated) subqueryler her satır için tekrar çalıştığından büyük tablolarda yavaştır. CTE ve JOIN tabanlı çözümler genellikle daha iyi performans sağlar. Execution Plan (sorgu yürütme planı) analiz edilerek darboğazlar tespit edilmelidir.

Bilkey SQL Server Veritabanı Programlama Kursu

Bilkey Bilişim Akademisi SQL Server Veritabanı Programlama Kursu'nda subquery, CTE, window fonksiyonları ve performans optimizasyonu uygulamalı olarak öğretilmektedir. Kurtköy merkezinde uzman eğitmenlerle SQL uzmanlığınızı geliştirin. 0216 354 7979

sql subquery sql alt sorgu sql cte common table expression sql with ifadesi sql ileri sorgu
SQL Programlama Eğitimi hakkında bilgi almak ister misiniz?

Birebir özel yüz yüze eğitim yada uzaktan eğitim, esnek ders saatleri ile Pendik Kurtköy'de.