SQL ile sayfalama, sql pagination
İnternet sayfalarında tablo gibi birçok kayıt listeleme yapılması halinde sayfa sayfa (paging) halinde gelir. Böylece internet sayfası çok hızlı yüklenir. İnternet programcıları sayfalama (paging) işlemini kullandıkları yazılım dili veya kütüphanesi sayesinde yapabilirler. Ancak bazı durumlarda SQL ile sayfalama yapma ihtiyacı doğabilir. MS SQL ile paging (sayfalama) yapılmak istenirse aşağıda bulunan iki sorgudan herhangi biri kullanılabilir.
Öncelikle bir veri seti için geçici bir tablo oluşturalım. SQL veri seti aşağıdaki linkte TSQL kodu olarak verilmiştir.
Şehirler SQL Veri Seti Linki burada bulunan sql kopyanıp kullanılabilir.
Oluşturulan tablo bir kısmı aşağıdaki gibidir.
SELECT * FROM #TEMP
PLAKA KODU | TELEFON ALAN KODU | ŞEHİR | BÖLGE |
01 | 322 | ADANA | AKDENİZ BÖLGESİ |
02 | 416 | ADIYAMAN | GÜNEYDOĞU BÖLGESİ |
03 | 272 | AFYONKARAHİSAR | EGE BÖLGESİ |
04 | 472 | AĞRI | DOĞU ANADOLU BÖLGESİ |
05 | 358 | AMASYA | KARADENİZ BÖLGESİ |
06 | 312 | ANKARA | İÇ ANADOLU BÖLGESİ |
07 | 242 | ANTALYA | AKDENİZ BÖLGESİ |
08 | 466 | ARTVİN | KARADENİZ BÖLGESİ |
09 | 256 | AYDIN | EGE BÖLGESİ |
10 | 266 | BALIKESİR | MARMARA BÖLGESİ |
İstenilen sayıda kayıt ve istenilen sayfanın gelmesi için parametrik olarak değer atanabilir.
---ROWS FETCH İLE SAYFALAMA
DECLARE @KAYITSAYISI int
DECLARE @SAYFA int
SET @KAYITSAYISI = 5
SET @SAYFA = 2
SELECT ILKOD,SEHIR,BOLGE FROM #TEMP
ORDER BY ILKOD
OFFSET @KAYITSAYISI * (@SAYFA - 1) ROWS FETCH NEXT @KAYITSAYISI ROWS ONLY;
---ROW NUMBER İLE SAYFALAMA
DECLARE @ILKKAYIT INT
DECLARE @SONKAYIT INT
SET @ILKKAYIT = 6
SET @SONKAYIT = 10
SELECT ILKOD,SEHIR,BOLGE
FROM
(SELECT ILKOD,SEHIR,BOLGE, ROW_NUMBER() OVER (ORDER BY ILKOD) AS SIRA
FROM #TEMP) AS SEHIRLER
WHERE SIRA >= @ILKKAYIT AND SIRA <= @SONKAYIT
ORDER BY ILKOD
Sorgu Sonucu:
ILKOD | SEHIR |
BOLGE |
06 | ANKARA | IÇ ANADOLU BÖLGESI |
07 | ANTALYA | AKDENIZ BÖLGESI |
08 | ARTVIN | KARADENIZ BÖLGESI |
09 | AYDIN | EGE BÖLGESI |
10 | BALIKESIR | MARMARA BÖLGESI |