SQL Server’da Recursive CTE Nedir?

Herkese merhaba,

Bu yazıda SQL Server’da Recursive CTE ile ilgili bilgi vermeye çalışacağım.

SQL Server’da Recursive CTE (Common Table Expression) SQL Server’da, bir tablonun kendisine işlemler uygulayarak bir sonraki satırlara referanslar oluşturmasını sağlayan bir tekniktir.

Bir recursive CTE, bir başlangıç ​​seti ile başlar ve her bir sonraki satır, önceki satırlara dayalı olarak hesaplanır. Bu işlem, CTE’deki özyinelemeli sorgunun kullanılmasıyla gerçekleştirilir. Bu teknik, özellikle hiyerarşik yapıları sorgulama gerektiğinde kullanışlıdır.

Aşağıda, bir özyinelemeli sorgu örneği verilmiştir:

CREATE TABLE Employee (
	EmployeeID INT PRIMARY KEY
   ,EmployeeName VARCHAR(50)
   ,DepartmentID INT
   ,ManagerID INT
);

INSERT INTO Employee
	VALUES (1, 'John', 1, NULL),
	(2, 'Mary', 1, 1),
	(3, 'Tom', 2, NULL),
	(4, 'Jane', 2, 3),
	(5, 'Mark', 3, 2),
	(6, 'Sarah', 3, 5);


WITH RecursiveCTE
AS
(SELECT
		EmployeeID
	   ,EmployeeName
	   ,DepartmentID
	   ,ManagerID
	FROM Employee
	WHERE DepartmentID = 1 -- Başlangıç seti
	UNION ALL
	SELECT
		e.EmployeeID
	   ,e.EmployeeName
	   ,e.DepartmentID
	   ,e.ManagerID
	FROM Employee e
	JOIN RecursiveCTE r
		ON e.ManagerID = r.EmployeeID)
SELECT
	EmployeeID
   ,EmployeeName
   ,DepartmentID
   ,ManagerID
FROM RecursiveCTE;

Bu sorgu, “DepartmentID” 1 olan başlangıç departmanına bağlı tüm alt departmanları ve alt departmanlara ait çalışanları listeler. Recursive CTE, her alt departman için kendisini tekrar çağırarak, her alt düzeydeki tüm çalışanları bulur.

Recursive CTE, hiyerarşik yapılar gibi ağaç benzeri veri yapıları üzerinde işlem yapmak gerektiğinde kullanılır. Bu ağaç benzeri yapılar, birbirine bağlı alt öğeleri olan bir üst öğeden oluşur. Örneğin, bir şirketin organizasyon yapısı, bir forumun konuları ve cevapları, bir ağacın dalları ve alt dalları gibi yapılar, hiyerarşik yapı örnekleridir.

Recursive CTE, bu tür yapıları sorgulamak için kullanışlıdır. Bir özyinelemeli sorgu kullanarak, bir başlangıç noktasından başlayarak ağaç yapısının tüm alt öğelerini dolaşabilir ve öğeler arasındaki ilişkileri belirleyebilirsiniz. Recursive CTE, veritabanından yalnızca istenen verileri çekmek için birçok sorgulama gerektiren bu tür yapılarda sorgulama işlemlerini basitleştirebilir ve optimize edebilir.

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

377 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!