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.