Ortak Tablo İfadeleri (CTE) ve Özyinelemeli (Recursive) CTE Senaryoları
Merhaba, bu makalede Microsoft SQL Server’daki Ortak Tablo İfadeleri (CTE) ve Özyinelemeli (Recursive) CTE’lerin nasıl kullanıldığını ve ne faydaları sağladıklarını inceleyeceğiz. CTE’ler, karmaşık sorguları daha okunabilir ve yönetilebilir hale getirmenin bir yoludur. Özyinelemeli CTE’ler ise, veri hiyerarşilerini işlerken özellikle kullanışlıdır.
Ortak Tablo İfadeleri (CTE)
Ortak Tablo İfadesi (CTE), bir sorgunun sonuçlarını geçici bir isimle tanımlamanızı sağlar. Bu geçici tablo, sorgunun başka bir yerinde kullanılabilir. CTE’ler, karmaşık sorguları parçalara bölmek ve okunabilirliği artırmak için kullanışlıdır.
-- Basit bir CTE örneği
WITH EmployeeCTE AS (
SELECT EmployeeID, FirstName, LastName, DepartmentID
FROM Employees
WHERE DepartmentID = 5
)
SELECT * FROM EmployeeCTE;Code language: SQL (Structured Query Language) (sql)
Yukarıdaki örnekte, EmployeeCTE adında bir CTE oluşturulmuştur ve bu CTE, Employees tablosundan DepartmentID değeri 5 olan kayıtları seçer. Daha sonra, bu CTE, ana sorguda kullanılarak sonuçlar alınır.
Özyinelemeli (Recursive) CTE
Özyinelemeli CTE’ler, bir tablonun hiyerarşik verilerini işlerken kullanışlıdır. Örneğin, bir organizasyonun aile ağacını veya bir kategori ağacını temsil eden bir tablo için, özyinelemeli CTE’ler kullanarak tüm alt kategorileri veya alt departmanları seçebilirsiniz.
-- Özyinelemeli CTE örneği
WITH EmployeeHierarchy AS (
-- İlk seviye
SELECT EmployeeID, FirstName, LastName, ManagerID, 1 AS Level
FROM Employees
WHERE ManagerID IS NULL
UNION ALL
-- Özyineleme
SELECT e.EmployeeID, e.FirstName, e.LastName, e.ManagerID, eh.Level + 1
FROM Employees e
INNER JOIN EmployeeHierarchy eh ON e.ManagerID = eh.EmployeeID
)
SELECT * FROM EmployeeHierarchy;Code language: SQL (Structured Query Language) (sql)
Yukarıdaki örnekte, EmployeeHierarchy adında bir özyinelemeli CTE oluşturulmuştur. İlk seviye, yöneticisi olmayan (root) çalışanları seçer. Daha sonra, özyineleme parçası, her bir çalışanın yöneticisi olan diğer çalışanları seçer ve bu işlem, bir sonucun yöneticisi olmayan bir çalışan olana kadar devam eder.
Özyinelemeli CTE Kullanımına Dikkat Edilmesi Gerekenler
Özyinelemeli CTE’ler, karmaşık sorguları işlerken çok güçlü bir araçtır. Ancak, bazı dikkat edilmesi gereken noktalar vardır:
- Performans: Özyineleme derinliği çok yüksek olduğunda performans sorunları yaşanabilir. Bu nedenle, özyineleme derinliğini sınırlamak için uygun bir yöntem kullanmak önemlidir.
- Yanlışlık: Özyinelemeli CTE’lerde yanlışlıkla sonsuz döngüye girmek mümkündür. Bu nedenle, özyinelemeli CTE’lerin doğru bir şekilde tanımlandığından emin olmak önemlidir.
Özyinelemeli CTE’ler, karmaşık hiyerarşik verileri işlerken çok güçlü bir araçtır. Ancak, bazı dikkat edilmesi gereken noktalar vardır:
Özet
Ortak Tablo İfadeleri (CTE) ve Özyinelemeli (Recursive) CTE’ler, karmaşık sorguları daha okunabilir ve yönetilebilir hale getirmenin bir yoludur. CTE’ler, karmaşık sorguları parçalara bölmek ve okunabilirliği artırmak için kullanışlıdır. Özyinelemeli CTE’ler ise, veri hiyerarşilerini işlerken özellikle kullanışlıdır.





