İleri Seviye SQL: CTE ve ROW_NUMBER ile Sayfalama İşlemleri
2 min readMar 20, 2022
İleri Seviye SQL: CTE ve ROW_NUMBER ile Sayfalama İşlemleri
# SQL’de CTE ve ROW_NUMBER ile Sayfalama İşlemleri
CTE ile sayfalama işlemlerini tam olarak kavrayabilmek için ilk önce İleri Seviye SQL: CTE ile Sayfalama İşlemleri makalesine göz atabilirsiniz.
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 tablo oluşacak.
# Örnek Verileri Oluşturalım
Kodları uyguladıktan sonra:
- dbo.Customers tablosuna 100 adet kayıt oluşacak.
# Verileri CTE ve ROW_NUMBER 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 ve ROW_NUMBER ile nasıl gerçekleşir?
Sorgu yapısından bahsetmem 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.
- ROW_NUMBER fonksiyonu yardımı ile her satır için sıradan satır numarası veriliyor.
- 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 ve WHERE ifadeleri ile sayfalama işlemi gerçekleştiriliyor.
Sonuç ise aşağıdaki 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ı ve ROW_NUMBER fonksiyonu ile de sayfalama işlemlerini gerçekleştirmesine yardımcı olduğunu öğrenmiş olduk.
# Sosyal Medya Hesaplarım
- LinkedIn: Karcan Ozbal | LinkedIn
- Github: karcan (Karcan Ozbal) (github.com)
- Patreon: Karcan is creating little extensions for make your life funny :)
Konu istekleri ve makale ile ilgili tartışmak için yoruma bekliyorum.