Membatasi Hasil — SQL

Gunakan LIMIT dan OFFSET untuk mengambil sebagian data. LIMIT — ambil N baris pertama: SELECT * FROM products ORDER BY price DESC LIMIT 3; -- 3 produk…

LIMIT memotong hasil query jadi beberapa baris pertama saja, dan OFFSET melewati sejumlah baris dulu sebelum mulai mengambil. Bayangin hasil pencarian di toko online: barangnya ribuan, tapi satu halaman cuma menampilkan 10. Halaman 1 mengambil 10 pertama, halaman 2 melewati 10 lalu mengambil 10 berikutnya. Itu LIMIT 10 dan OFFSET 10.

🧪 Tebakan cepat: apakah SELECT * FROM students LIMIT 3; memberi 3 siswa dengan nilai tertinggi? Tebak dulu, jawabannya ada di bagian "LIMIT tanpa ORDER BY".

LIMIT: ambil N baris pertama

Tabel students di Lab dan latihan berisi 7 siswa:

id name grade city
1 Dewi 90 Jakarta
2 Rizky 85 Bandung
3 Maya 92 Surabaya
4 Andi 78 Jakarta
5 Budi 88 Bandung
6 Citra 95 Yogyakarta
7 Dimas 82 Semarang

Tiga nilai tertinggi:

SELECT * FROM students
ORDER BY grade DESC
LIMIT 3;
id name grade city
6 Citra 95 Yogyakarta
3 Maya 92 Surabaya
1 Dewi 90 Jakarta

LIMIT tanpa ORDER BY

SELECT * FROM students LIMIT 3;

Hasilnya Dewi, Rizky, Maya: 3 baris pertama sesuai urutan SQLite menyimpannya. Itu jawaban tebakannya: tanpa ORDER BY, LIMIT 3 cuma "3 baris mana saja", bukan 3 terbaik. Citra (95) gak ikut sama sekali.

OFFSET: lewati dulu, baru ambil

OFFSET melewati sejumlah baris dari hasil yang sudah urut. Dengan 3 siswa per halaman:

Halaman Query Hasil
1 LIMIT 3 OFFSET 0 Citra, Maya, Dewi
2 LIMIT 3 OFFSET 3 Budi, Rizky, Dimas
3 LIMIT 3 OFFSET 6 Andi

Rumusnya: OFFSET = (halaman - 1) × LIMIT. Halaman 3 berarti (3 - 1) × 3 = 6 baris dilewati. Halaman terakhir boleh kurang dari 3 baris: di sini tinggal Andi.

Urutan klausa

Klausa ditulis dengan urutan tetap: SELECT, FROM, WHERE, ORDER BY, LIMIT, OFFSET. Kalau tertukar, SQLite menolak:

💡 Beda SQLite, MySQL, dan PostgreSQL

⚠️ Jebakan yang sering ketemu

TL;DR: LIMIT n mengambil n baris pertama dari hasil query, OFFSET m melewati m baris dulu. Selalu urutkan dulu dengan ORDER BY, kalau gak, "3 teratas" cuma 3 baris sembarang. Untuk halaman: LIMIT ukuran OFFSET (halaman - 1) × ukuran, dan halaman 1 itu OFFSET 0. Urutan klausa: WHERE, ORDER BY, LIMIT, OFFSET.

Yang akan kamu pelajari