Cross Apply Ve Outer Apply
- Seda Özdemir
- 28 Haz 2015
- 2 dakikada okunur
1. CROSS APPLY
Sorgulardan dönen resultsetleri kolonları ile beraber bir tablo içine transfer etmeye yarar. İşlem yapıldıktan sonra tabloda özel olarak görmek istediğimiz kolonlar eklenmiş olur. Anlık görüntü oluşturur daha sonra tabloya bakıldığında cross apply uygulanmadan önceki şekliyle görünür.
Kullanim yapısı:
select * from TabloA
cross apply
(sorgu) as tabloB
örn1:
Northwind' de bulunan Employees tablosuna aşağıdaki sorgudan dönen sonucu ekleyeceğim. Öncelikle sorguyu inceleyin. Sorgu Çalışanların bu zamana kadar ki sattığı ürünlerin hangi ürün olduğuyla beraber adedini döndürüyor;
(result setin devamı var fakat kodun okunabilirliği için almadım)

Cross Apply Kodu :

Not:Kodu çalıştırdığımızda tablo aşağıdaki gibi geliyor.

Aşağıda görüldüğü gibi Employees tablosunu sonra tekrar çalıştırdığımda eklenen kolonlar görünmez çünkü cross apply sadece result set i etkiler. Tabloda değişiklik yapmaz.

Sorgu yerine fonksiyon gibi ifadelerde kullanılabilir önemli olan tablo şekllinde resultset döndürmesidir.
Fonksiyon Ile Kullanimi :
Örnek olarak aşağıdaki gibi bir function yazdım. İçine gönderilen parametreyi where kısmında employeeID ile eşitleyerek çalışanın ad ve soyad bilgilerini ekrana getiriyor.
alter function KimlerNereli
(@employeeid int)
returns @tablom table(
isim nvarchar(10),
soyisim nvarchar(20)
)
begin
insert @tablom select FirstName,LastName from Employees where EmployeeID=@employeeid
return
end
Sorgu Kodu :
Tanımladığım fonksiyonu joinlediğim EmloyeeTerritories ve Territories tablolarının resultseti ile birleştiriyorum içerisine giden parametre olarak ise EmloyeeTerritories' den gelen EmloyeeID yi gönderiyorum ve fonksiyondan geriye Employee' nin(calısanın) ismi ve soyadı dönüyor.
select B.isim, B.soyisim,C.TerritoryDescription from EmployeeTerritories as A join Territories as C on
c.TerritoryID=A.TerritoryID
cross apply
dbo.KimlerNereli(A.EmployeeID) as B

2. OUTER APPLY
Left join mantığı ile düşünülebilir. Cross applyda ortak kolondaki tüm ortak satırlar gelirken. Outer Apply ile sol tablo nun resultset' i baz alınarak outer apply dan sonraki sorgunun resultseti gelir. Soldaki tablonun ortak sütunundaki ortak olan verilerin bulunduğu satırla dolu olarak gelir. Ortak olmayanlar yerine ise 'Null' gelir.
Comments