Masalah:
Anda ingin membatasi baris dalam kumpulan hasil SQL Server.
Contoh:
Basis data kami memiliki tabel bernama toy
dengan data pada kolom id
, name
, dan price
.
id | nama | harga |
---|---|---|
161 | Sepeda BMX | 200.00 |
121 | Robot Tobie | 185,50 |
213 | Permainan memancing | 25.00 |
102 | Teka-teki Hewan | 45,80 |
111 | Set Lintasan Balap | 126,70 |
233 | Bata Ringan | 21.00 |
Mari kita pilih nama dan harga mainan. Tapi kita hanya perlu melihat lima baris pertama.
Solusi 1:
SELECT name, price FROM toy ORDER BY price OFFSET 0 ROWS FETCH FIRST 5 ROWS ONLY;
Berikut hasil querynya:
nama | harga |
---|---|
Bata Ringan | 21.00 |
Permainan memancing | 25.00 |
Teka-teki Hewan | 45,80 |
Set Lintasan Balap | 126,70 |
Robot Tobie | 185,50 |
Diskusi:
Untuk membatasi baris dalam kumpulan hasil, gunakan ORDER BY dengan klausa OFFSET dan FETCH opsional. Pertama, kueri mengurutkan baris (ORDER BY). Anda kemudian memberi tahu SQL Server mana yang harus menjadi baris pertama dalam kumpulan hasil (OFFSET...ROWS) dan berapa banyak baris yang akan dikembalikan (FETCH...ONLY).
Klausa OFFSET ditempatkan segera setelah ORDER BY. Bilangan bulat menunjukkan baris pertama yang akan dihitung (dalam SQL Server, baris pertama adalah 0, baris kedua adalah 1, dst.), diikuti dengan kata kunci ROW atau ROWS. Anda dapat menggunakan ROW atau ROWS, tetapi disarankan untuk menggunakan ROW untuk 1 baris dan ROWS untuk 0 dan beberapa baris. Lihat gambarnya:
Dalam contoh kami, kami mengurutkan berdasarkan harga (ORDER BY price
) dan mulai mengembalikan hasil dari baris pertama (OFFSET 0 ROWS
). Kemudian kita menggunakan FETCH dengan kata kunci FIRST. Anda dapat menggunakan FIRST atau NEXT; disarankan untuk menggunakan FIRST jika Anda memulai dari baris pertama tanpa menghilangkan catatan apa pun dan NEXT jika ada baris yang dihilangkan (yaitu jika OFFSET lebih besar dari 0).
Akhirnya, kami memiliki jumlah baris untuk dipilih dan kata kunci HANYA BARIS. Gunakan ROWS ONLY jika Anda mengembalikan beberapa baris dan ROW ONLY Anda membatasi hasilnya menjadi satu baris. Dalam contoh kami, kami membatasinya hingga lima baris (FETCH FIRST 5 ROWS ONLY
).
Di bawah, kami memiliki kueri lain yang membatasi baris hingga lima tetapi dimulai dari baris kelima dalam tabel (OFFSET 4 ROWS
):
Solusi 2:
SELECT name, price FROM toy ORDER BY price OFFSET 4 ROWS FETCH NEXT 5 ROWS ONLY;
Berikut hasil querynya:
nama | harga |
---|---|
Robot Tobie | 185,50 |
Sepeda BMX | 200.00 |
Perhatikan bahwa kueri ini hanya mengembalikan dua baris, bukan lima yang ditunjukkan. Lihat gambarnya:
Kenapa hanya dua baris? Karena tabel ini hanya berisi enam record. Jika kita menghilangkan empat baris pertama dan memulai dari baris 5, hanya tersisa dua baris.
SQL Server memiliki cara lain untuk membatasi baris:klausa TOP.
Solusi 3:
SELECT TOP 3 name, price FROM toy ORDER BY price;
Berikut hasil querynya:
nama | harga |
---|---|
Bata Ringan | 21.00 |
Permainan memancing | 25.00 |
Teka-teki Hewan | 45,80 |
Jika Anda tidak perlu menghilangkan baris apa pun, Anda dapat menggunakan klausa TOP SQL Server untuk membatasi baris yang dikembalikan. Itu ditempatkan segera setelah SELECT. Kata kunci TOP diikuti oleh bilangan bulat yang menunjukkan jumlah baris yang akan dikembalikan. Dalam contoh kami, kami memesan berdasarkan harga dan kemudian membatasi baris yang dikembalikan menjadi 3.
Berbeda dengan metode OFFSET – FETCH, TOP tidak memerlukan ORDER BY. Berikut ini contoh serupa, tetapi tanpa mengurutkan catatan:
Solusi 4:
SELECT TOP 3 name, price FROM toy;
Berikut hasil querynya:
Perhatikan bahwa catatan yang berbeda telah dikembalikan. Biasanya (tetapi tidak selalu) baris akan ditampilkan dalam urutan catatan dimasukkan ke dalam tabel.
Sebaiknya gunakan OFFSET dan FETCH daripada TOP, karena OFFSET dan FETCH adalah standar SQL; TOP khusus untuk T-SQL.