İleri Seviye SQL: CTE ile Sayfalama İşlemleri

Karcan Ozbal
2 min readMar 20, 2022

# SQL’de CTE ile Sayfalama İşlemleri

Veritabanında bulunan verileri uygulama ekranlarında listelenir. Ancak bu listeleme işlemleri veri sayımız arttıkça süre bakımından uzamaya başlar. Veritabanı yönetim sistemimizin listeleme işlemi için tüketeceği kaynaklar bir maliyettir. Bu gibi listeleme işlemlerinde genelde uygulama ekranlarındaki sunumlar için sayfalama işlemleri yapılır. Aslında bu durumu bir çok web sitesinde görürüz. Birçok uygulamada standart bir tablo üzerinde sayfalanmış veriler ile karşılaşırız. Bu sayfalama işleminin bize getirisi ise tablodaki kayıt sayısının gözle görülür derecede farkı olmadan sadece görüntülemek istediğimiz sayfadaki kayıtları veritabanından sorgulamaktır.

Ancak sorgu üzerinde sayfalama işlemlerini gerçekleştirirken, uygulama ekranlarında bu sayfalama işleminin, verinin gerçek kayıt sayısı üzerinden gerçekleştirilebilmesi için SQL Server’da en performanslı yöntemlerden biri olan CTE kullanılabilir.

Peki, nedir bu CTE? : İleri Seviye SQL : CTE (Common Table Expressions)

# Yeni Bir Veritabanı ve Tablo Yapısının Oluşturulması

Kodları uyguladıktan sonra:

  • CTE_Paging isminde veritabanı,
  • dbo.Customers tablosu oluşacak.

# Örnek Verilerin Oluşturulması

Kodları uyguladıktan sonra:

  • dbo.Categories tablosunda 100 adet kayıt oluşacak.

# Verileri CTE ile Sayfalar Halinde Listelemek

Senaryoya göre, müşteri tablosundaki kayıtların her bir sayfada 25 kayıt olacak şekilde liste bekleniyor. Peki, bu işlem CTE ile nasıl gerçekleşir?

Sorgu yapısından bahsetmek gerekirse:

  • @vPageRowCount değişkenini sayfa başına gösterilecek kayıt sayısı, @vPageNumber değişkenini de istenilen sayfa numarası için kullanılacak.
  • CTE_Data sorgu bloğu ise verilerin getirileceği tablo ve tabloya ait sorguların bulunduğun kısım. (parametrik olarak filtre gerekir ise, bu kısımda WHERE koşulları ile yapmamız gerekir)
  • CTE_Count ise, CTE_Data sorgu sonucunda sayfalama yapmadan önceki toplam satır sayısına ulaşacağımız kısımdır, CTEyi asıl kullanma amacımız aslında burasıdır.
  • Son aşamada ise, CTE_Data ve CTE_Count’dan bize gelen verileri sunma ve hemen arından ORDER BY, OFFSET ve FETCH keyword’leri ile sayfalama işlemi gerçekleştiriliyor.

ORDER BY: veriyi sıralamak için. OFFSET: göstereceğimiz satırlar için ilk kaydın sırası, FETCH: kaç adet satır göstereceğimizi belirtmek için kullanılır.

Sonuç ise aşağıda ki gibi olmalıdır.

# Kazanımlar

  • CTE’nin tek bir DML ifadesi süresince var olduğunu ve genellikle recursive işlemlerde kullanıldığını,
  • View, temp table ve table-value constructora benzediğini ve alanların deklare edilmemesi gerektiğini,
  • Birden fazla CTE ifadesi kullanılabildiğini,
  • Recursive işlemlerde satır limitinin olduğunu,
  • CTE’nin Sayfalama işlemlerinde, toplam kayıt sayısına performanslı bir şekilde ulaşılmasını sağladığını öğrenmiş olduk.

# Sosyal Medya Hesaplarım

Konu istekleri ve makale ile ilgili tartışmak için yoruma bekliyorum.

--

--