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