MSSQL Dersleri #16: Ortak Tablo İfadeleri (CTE) ve Özyinelemeli (Recursive) CTE Senaryoları

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.

💡 Kıdemli DBA Triki: Özyinelemeli CTE’ler, karmaşık hiyerarşik verileri işlerken çok etkili olabilir. Ancak, ö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.

Ö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.
⚠️ Canlı Ortam Uyarısı: Özyinelemeli CTE’ler, canlı ortamda kullanıldığında performans sorunlarına neden olabilir. Bu nedenle, özyinelemeli CTE’lerin canlı ortamda kullanılmadan önce test edilmesi ö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.

NasuhAkay
NasuhAkay

Nasuh Akay, 20 yılı aşkın IT deneyimine sahip; kurumsal teknoloji çözümleri, ERP sistemleri, yazılım geliştirme, veri yönetimi ve dijital dönüşüm alanlarında çalışmalar yürüten bir teknoloji profesyonelidir.

Kariyeri boyunca farklı sektörlerde edindiği deneyimlerini; teknoloji, yazılım, veri mimarisi ve iş süreçlerinin geliştirilmesi üzerine yoğunlaştırmıştır.

Bu blogda ERP çözümleri, SQL Server, yazılım geliştirme, yapay zekâ, dijital dönüşüm ve teknoloji dünyasındaki gelişmeler üzerine bilgi, deneyim ve teknik paylaşımlarını okuyucularla buluşturmaktadır.

Amacı, karmaşık teknik konuları anlaşılır bir dille ele almak, gerçek hayatta karşılaşılan problemlere yönelik uygulanabilir çözümler sunmak ve teknoloji alanındaki bilgi birikimini paylaşmaktır.

Articles: 909

Leave a Reply

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir