ORDER BY, LIMIT & OFFSET: Mengurutkan dan Membuat Halaman
Mengurutkan hasil dengan ORDER BY (naik/turun, banyak kolom), membatasi jumlah baris dengan LIMIT, dan membuat pagination dengan OFFSET.
Urutan hasil tidak dijamin... kecuali kamu memintanya
Tanpa ORDER BY, MySQL boleh menampilkan baris dalam urutan apa saja (biasanya urutan penyimpanan, tapi tidak ada jaminan). Jika urutan penting, wajib tulis ORDER BY.
SELECT nama, harga FROM produk ORDER BY harga; -- kecil ke besar (ASC, bawaan)
SELECT nama, harga FROM produk ORDER BY harga DESC; -- besar ke kecil
SELECT nama, harga FROM produk ORDER BY nama ASC; -- A ke Z
Mengurutkan dengan banyak kolom
Kolom kedua dipakai untuk memutuskan bila kolom pertama seri:
SELECT nama, kategori_id, harga
FROM produk
ORDER BY kategori_id ASC, harga DESC;
-- urut per kategori, lalu di dalam kategori yang termahal dulu
Setiap kolom punya arah sendiri-sendiri.
LIMIT: membatasi jumlah baris
SELECT nama, harga FROM produk ORDER BY harga DESC LIMIT 3; -- 3 termahal
ORDER BY + LIMIT adalah pasangan emas untuk pertanyaan seperti "5 pelanggan terbaru", "3 produk terlaris", atau "10 transaksi terbesar".
OFFSET: melompati baris, kunci pagination
LIMIT 4 OFFSET 0 -- halaman 1: baris 1-4
LIMIT 4 OFFSET 4 -- halaman 2: baris 5-8
LIMIT 4 OFFSET 8 -- halaman 3: baris 9-12
Rumus: OFFSET = (nomor_halaman - 1) * jumlah_per_halaman. Bentuk singkat LIMIT 4, 4 (offset dulu, baru jumlah) juga berlaku di MySQL, tapi bentuk LIMIT jumlah OFFSET n lebih mudah dibaca.
Pagination tanpa ORDER BY itu bug! Tanpa urutan pasti, "halaman 2" bisa berisi baris yang sudah tampil di halaman 1. Selalu urutkan, dan beri kolom pemutus seri (misalnya id) agar urutan benar-benar tetap.
Urutan penulisan klausa
SELECT ...
FROM ...
WHERE ...
ORDER BY ...
LIMIT ...;
Urutan ini tidak boleh tertukar. ORDER BY boleh memakai alias dari SELECT dan boleh juga memakai nomor posisi kolom (ORDER BY 2), meski nama kolom lebih jelas.