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.
- CROSS APPLY: Sağ taraf satır döndürmezse sol satır elenir (INNER JOIN gibi).
- OUTER APPLY: Sağ taraf boşsa sol satır NULL'larla korunur (LEFT JOIN gibi).
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.