SQL Server’da OUTER APPLY Kullanmak

Herkese merhaba. Bu yazıda SQL Server’da OUTER APPLY kullanmak ile ilgili bilgi paylaşacağım.

SQL Server’da OUTER APPLY, bir tablodan veya sorgudan elde edilen verileri diğer bir tablo veya sorgu üzerinde uygulama işlemine olanak tanıyan bir JOIN operatörüdür. OUTER APPLY, CROSS APPLY gibi SQL Server’ın T-SQL dilinde yer alan APPLY operatörlerinden biridir.

SQL Server’da OUTER APPLY, bir JOIN türüdür ve genellikle bir alt sorgu veya bir tablo değerli fonksiyon (TVF) ile kullanılır. OUTER APPLY, sorgunun her bir satırı için, sağ tarafındaki alt sorgu veya TVF’yi uygular ve eşleşen sonuçları döndürür. Eğer eşleşme yoksa, LEFT OUTER JOIN’da olduğu gibi, NULL değerleri döndürür.

SQL Server’da OUTER APPLY kullanımı, özellikle bir tablonun her bir satırı için bir alt sorgunun veya TVF’nin (Tablo Değerli Fonksiyon) uygulanması gerektiğinde yararlıdır. Bu, özellikle karmaşık sorgularda kullanıcı tarafından oluşturulmuş fonksiyonların veya alt sorguların kullanımıyla oldukça yararlıdır.

SQL Server’da OUTER APPLY’ı anlamak için aşağıdaki tabloyu oluşturup sorguyu inceleyelim.

CREATE TABLE Calisanlar (
	CalisanID INT PRIMARY KEY
   ,Adi VARCHAR(50) NOT NULL
   ,Soyadi VARCHAR(50) NOT NULL
   ,DepartmanID INT NOT NULL
   ,Maas DECIMAL(10, 2) NOT NULL
);

CREATE TABLE Departmanlar (
	DepartmanID INT PRIMARY KEY
   ,DepartmanAdi VARCHAR(50) NOT NULL
);

INSERT INTO Calisanlar (CalisanID, Adi, Soyadi, DepartmanID, Maas)
	VALUES (1, 'Ahmet', 'Yilmaz', 1, 5000.00);

INSERT INTO Calisanlar (CalisanID, Adi, Soyadi, DepartmanID, Maas)
	VALUES (2, 'Mehmet', 'Kaya', 1, 6000.00);

INSERT INTO Calisanlar (CalisanID, Adi, Soyadi, DepartmanID, Maas)
	VALUES (3, 'Ayse', 'Ozturk', 2, 4500.00);

INSERT INTO Calisanlar (CalisanID, Adi, Soyadi, DepartmanID, Maas)
	VALUES (4, 'Fatma', 'Aydin', 2, 5500.00);

INSERT INTO Departmanlar (DepartmanID, DepartmanAdi)
	VALUES (1, 'Muhasebe');

INSERT INTO Departmanlar (DepartmanID, DepartmanAdi)
	VALUES (2, 'Insan Kaynaklari');

SELECT
	D.DepartmanAdi
   ,DA.OrtalamaMaas
FROM Departmanlar D
OUTER APPLY (SELECT
		AVG(Maas) AS OrtalamaMaas
	FROM Calisanlar C
	WHERE C.DepartmanID = D.DepartmanID) DA

SQL Server'da OUTER APPLY Kullanmak

Yukarıdaki sorgu, her bir departmanın adını ve ortalama maaşını döndürür. OUTER APPLY, her bir departmanı “Departmanlar” tablosu ile birleştirir ve her bir departman için bir alt sorgu çalıştırır. Bu alt sorgu, aynı departmanda çalışan diğer çalışanların maaşlarının ortalama değerini hesaplar. Eğer bir departmanda hiç çalışan yoksa, OrtalamaMaas NULL olarak döndürülür.

Yukarıdaki sorgu biraz karmaşık gelebilir. Bunu da tablo döndüren fonksiyon kullanarak aşabiliriz. İlk olarak aşağıdaki fonksiyonu oluşturalım.

CREATE FUNCTION GetOrtalamaMaas (@DepartmanID INT)
RETURNS DECIMAL(10, 2)
AS
BEGIN
	DECLARE @OrtalamaMaas DECIMAL(10, 2)
	SELECT
		@OrtalamaMaas = AVG(Maas)
	FROM Calisanlar
	WHERE DepartmanID = @DepartmanID
	RETURN @OrtalamaMaas
END

Şimdi bu fonksiyonu OUTER APPLY ifadesi ile birlikte kullanalım.

SELECT
	D.DepartmanAdi
   ,dbo.GetOrtalamaMaas(D.DepartmanID) AS OrtalamaMaas
FROM Departmanlar D

SQL Server'da OUTER APPLY Kullanmak

Yukarıdaki sorgu, her bir departmanın adını ve ortalama maaşını döndürür. OUTER APPLY yerine fonksiyon kullanarak da benzer bir sonuç elde edebiliriz. Fonksiyon, SQL Server’da özellikle karmaşık sorgularda kullanıcıya birçok fayda sağlar ve tekrar tekrar kullanılabilir bir bileşen olarak kullanılabilir.

SQL Server’da OUTER APPLY, özellikle alt sorgu veya tablo değerli fonksiyonlar ile çalışırken kullanılabilir. Fonksiyon veya alt sorgu sonuçlarını, ana sorgu sonucu ile birleştirerek, sonuçları daha anlamlı ve daha okunaklı bir şekilde sunabilir.

SQL Server’da OUTER APPLY operatörü, birleştirme yapmak istediğimiz ana tabloya (sol taraf) ve birleştireceğimiz tablo değerli fonksiyon veya alt sorguya (sağ taraf) ihtiyaç duyar. RIGHT OUTER JOIN ve CROSS APPLY operatörleri de OUTER APPLY gibi çalışır, ancak farklı kullanım durumlarına sahiptir.

SQL Server’da OUTER APPLY, aşağıdaki senaryolarda kullanılabilir:

  • Alt sorgu veya tablo değerli fonksiyon (TVF) sonuçlarının her bir ana sorgu satırına uygulanması gerektiğinde.
  • Ana sorgunun sonuç kümesinde NULL değerleri olan satırların da döndürülmesi gerektiğinde.
  • Sorgunun performansını artırmak için TVF (Tablo Değerli Fonksiyon) veya alt sorgu kullanımı gerektiğinde.

Özellikle karmaşık sorgularda OUTER APPLY kullanmak, sorgunun daha okunaklı, anlaşılır ve sürdürülebilir hale gelmesine yardımcı olabilir. Ayrıca, ana tablo ve tablo değerli fonksiyon veya alt sorgu arasında doğru birleştirme yaparak, sonuçların beklenen şekilde döndürülmesini sağlar.

SQL Server’da OUTER APPLY operatörü, SQL sorgularında daha okunaklı, anlaşılır ve sürdürülebilir kodlar yazmamıza yardımcı olur. Özellikle, alt sorgular veya tablo değerli fonksiyonlar ile birleştirme yapmak zorunda kaldığımız karmaşık sorgularda OUTER APPLY, kullanım kolaylığı sağlar.

Sonuç olarak, OUTER APPLY, SQL Server sorgularında kompleks hesaplama ve filtreleme işlemleri için kullanışlı bir JOIN operatörüdür. Ancak, doğru kullanımı önemlidir ve performansı etkilememesi için sorgularda dikkatli bir şekilde kullanılmalıdır.

Linkteki kaynağı da okuyabilirsiniz : https://www.c-sharpcorner.com/UploadFile/f0b2ed/cross-apply-and-outer-apply-in-sql-server/

Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.

580 Kez Okundu

Yavuz Selim Kart

Yazılım ve veri tabanında bildiklerimi anlatmaya gayret ediyorum. Halen birçok programlama dili üzerinde araştırmalar yaparak kendimi geliştiriyorum. Bunlar haricinde Grafik Tasarım ve Wordpress konularına da ilgim bulunmakta. SEO ve Sosyal medya yönetimleri hakkında da bilgim mevcuttur. Kısaca çok çalışmayı seven azimli biriyim.

You may also like...

Yazı kopyalamak yasaktır!