Ana içeriğe geç
Kesit SQL
Orta · T-SQL (SQL Server)

CROSS APPLY ve OUTER APPLY

Her satır için çalışan alt sorgu: grup başına ilk N ve satır bazlı hesaplar.

Uygulamada aç, 3 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

APPLY nedir?

APPLY, sol taraftaki her satır için sağdaki tablo ifadesini (alt sorgu veya tablo değerli fonksiyon) çalıştırır ve sonuçları birleştirir. Sağ taraf, sol taraftaki sütunlara başvurabilir; normal JOIN'de bu mümkün değildir.

Her müşterinin son 2 siparişi

SELECT c.customer_id, c.first_name, s.order_id, s.order_date
FROM customers c
CROSS APPLY (
    SELECT TOP 2 o.order_id, o.order_date
    FROM orders o
    WHERE o.customer_id = c.customer_id
    ORDER BY o.order_date DESC
) AS s
WHERE c.city = N'Bursa'
ORDER BY c.customer_id, s.order_date DESC;

OUTER APPLY ile satır bazlı özet

SELECT d.name, x.calisan_sayisi, x.ort_maas
FROM departments d
OUTER APPLY (
    SELECT COUNT(*) AS calisan_sayisi, AVG(e.salary) AS ort_maas
    FROM employees e
    WHERE e.dept_id = d.dept_id
) AS x
ORDER BY d.dept_id;

Çalışanı olmayan Hukuk departmanı da 0 çalışanla listelenir.

Diğer kullanımlarAPPLY ayrıca tablo değerli fonksiyonları satır satır çağırmak (CROSS APPLY dbo.fn(c.id)), metni parçalamak (CROSS APPLY STRING_SPLIT(etiketler, ',')) ve JSON açmak (CROSS APPLY OPENJSON(...)) için kullanılır. Bu taklitte APPLY alt sorgu ve satır içi tablo fonksiyonlarıyla çalışır.
Alıştırmalara geç (3)