Sebuah database dapat memiliki ratusan ribu record. Sangat mudah untuk memasukkan dan memilih catatan ini melalui sistem manajemen basis data seperti SQL Server atau MySQL dll. Namun, tidak mudah untuk menampilkan ribuan catatan pada satu halaman web atau dalam aplikasi desktop. Keterbatasan ruang dan memori membuat sulit untuk menampilkan sejumlah besar catatan sekaligus.
Solusi umum untuk masalah seperti itu adalah dengan mengimplementasikan paging. (Catatan, ini bukan paging memori yang diterapkan oleh sistem operasi) Paging dalam pemrograman mengacu pada menampilkan data melalui serangkaian halaman. Pencarian Google acak dapat menghasilkan ribuan hasil. Google menggunakan paging untuk menampilkan hasil ini. Jika Anda menggulir ke bawah halaman Google dengan hasil pencarian, Anda akan melihat yang berikut:
Di sini Anda dapat melihat jumlah halaman yang dibagi menjadi hasil pencarian. Anda dapat mengklik tautan Berikutnya untuk melihat lebih banyak halaman.
Pada artikel ini, kita akan melihat bagaimana operator OFFSET FETCH NEXT dapat digunakan untuk mengimplementasikan paging pada aplikasi front-end. Kita akan mulai dengan contoh sederhana menggunakan operator OFFSET FETCH NEXT dan kemudian akan melihat bagaimana hal itu dapat digunakan secara praktis dengan bantuan prosedur tersimpan.
Menggunakan OFFSET FETCH NEXT untuk Paging di SQL Server
SQL Server berisi operator OFFSET &NEXT untuk mengimplementasikan paging. Operator OFFSET mengimbangi jumlah K berikutnya dari hasil pencarian dari awal, sedangkan operator FETCH NEXT mengambil hasil NEXT N di mana K dan N adalah bilangan bulat.
Menyiapkan Data Dummy
Sebelum kita dapat melihat OFFSET FETCH NEXT beraksi, mari buat database dummy dengan 200 record. Anda dapat menggunakan database yang berfungsi jika Anda 100% yakin bahwa itu telah dicadangkan dengan benar. Jalankan skrip berikut untuk melakukannya:
CREATE Database ShowRoom; GO USE ShowRoom; CREATE TABLE Cars ( id INT PRIMARY KEY IDENTITY, name VARCHAR(50) NOT NULL, company VARCHAR(50) NOT NULL, power INT NOT NULL )
Pada script diatas kita membuat database dummy ShowRoom dengan satu tabel bernama Cars. Mari tambahkan beberapa catatan dummy dalam database ini. Jalankan script berikut:
USE ShowRoom DECLARE @count INT SET @count = 1 DECLARE @carname VARCHAR (50) DECLARE @company_name VARCHAR (50) WHILE (@count <= 200) BEGIN SET @carname = 'Car - ' + LTRIM(@count) SET @company_name = 'Company - '+ LTRIM(@count) INSERT INTO Cars VALUES (@carname, @company_name, @count * 5) SET @count = @count + 1 END
Perhatikan baik-baik skrip di atas. Script di atas menyisipkan 200 catatan dummy ke dalam tabel Mobil. Script menggunakan loop sementara untuk 200 iterasi. Setiap iterasi menambahkan kata 'Mobil -' ke nomor iterasi dan hasilnya dimasukkan ke dalam kolom nama tabel Mobil. Demikian pula, kata "Perusahaan -" ditambahkan dengan nomor iterasi dan dimasukkan ke dalam kolom perusahaan di setiap iterasi. Terakhir, dengan setiap iterasi, nomor iterasi dikalikan dengan 5 dan hasilnya dimasukkan ke dalam kolom daya. Sekarang jika Anda memilih semua catatan dari tabel Mobil, Anda akan melihat 200 catatan di kumpulan hasil. Jalankan kueri berikut untuk melakukannya:
SELECT * FROM Cars
Screenshot sebagian hasil query di atas adalah sebagai berikut. Anda dapat melihat 200 baris dalam hasil.
Contoh OFFSET FETCH BERIKUTNYA
Sekarang mari kita lihat aksi OFFSET NEXT. Sintaks OFFSET NEXT adalah sebagai berikut:
SELECT * FROM Table_Name ORDER BY COLUMN_NAME/S OFFSET Number_of_rows_to_Skip ROWS FETCH NEXT Number_of_rows_to_Fetch ROWS ONLY
Penting untuk disebutkan di sini bahwa Anda harus menggunakan klausa ORDER BY dengan klausa OFFSET FETCH NEXT.
Mari kita lihat contoh sederhana OFFSET FETCH NEXT dimana kita akan mengurutkan data berdasarkan kolom id pada tabel Cars, melewati 20 baris pertama, dan mengambil 10 baris berikutnya. Jalankan script berikut:
USE ShowRoom SELECT * FROM Cars ORDER BY id OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY
Pada output skrip di atas, Anda akan melihat record dengan nilai id 21 hingga 30 karena kita melewatkan 20 record pertama dan mengambil 10 record berikutnya.
Menggunakan OFFSET FETCH NEXT dengan Stored Procedure
Jika Anda menerapkan paging di aplikasi ujung depan seperti situs web atau aplikasi desktop, Anda biasanya akan mengirim nomor halaman dan nilai ukuran halaman ke server melalui prosedur tersimpan. Bergantung pada nilai nomor halaman dan ukuran halaman, prosedur tersimpan akan mengembalikan kumpulan baris yang benar. Mari kita tulis prosedur tersimpan yang menggunakan nomor halaman dan ukuran halaman sebagai parameter dan mengembalikan catatan yang sesuai.
Perhatikan script berikut:
USE ShowRoom GO CREATE PROC spGetRecordsByPageAndSize @Page INT, @Size INT AS BEGIN SELECT * FROM Cars ORDER BY id OFFSET (@Page -1) * @Size ROWS FETCH NEXT @Size ROWS ONLY END
Pada script diatas kita membuat stored procedure spGetRecordsByPageAndSize yang mengambil 2 parameter @Page dan @Size. Prosedur tersimpan menggunakan OFFSET FETCH NEXT untuk memfilter catatan menurut sejumlah halaman dan ukuran halaman. Misalnya, jika nomor halaman adalah 2, dan ukurannya 20, OFFSETnya adalah:
(2 – 1) * 20 =20
Dan nilai untuk FETCH selanjutnya akan sama dengan @Size yaitu 20. Oleh karena itu catatan dengan id 21 hingga 40 akan dikembalikan. Jalankan skrip di atas untuk membuat prosedur tersimpan.
Setelah Anda membuat prosedur tersimpan, jalankan skrip berikut untuk melihat apa yang dikembalikan saat nomor halaman 2 dan ukuran halaman 20.
EXECUTE spGetRecordsByPageAndSize 2, 20
Output dari script di atas terlihat seperti ini:
Demikian pula, jika Anda ingin mengambil catatan untuk halaman ke-4 dengan 15 catatan per halaman, kueri berikut mengambil catatan dari id 46 ke id 60.
EXECUTE spGetRecordsByPageAndSize 4, 15
Output dari tampilan seperti ini:
Kesimpulan
OFFSET FETCH NEXT adalah alat yang sangat berguna, terutama jika Anda ingin menampilkan sejumlah besar catatan yang dikelompokkan ke dalam halaman. Dalam artikel ini, kita melihat bagaimana ini digunakan bersama dengan prosedur tersimpan untuk mengimplementasikan paging pada aplikasi front-end.