MySQL LIMIT & OFFSET dengan Contoh

⚡ Ringkasan Cerdas

The MySQL Kata kunci LIMIT membatasi jumlah baris yang dikembalikan oleh kueri, dan nilai OFFSET menentukan baris mana yang menjadi titik awal hasil. Bersama-sama, keduanya menjaga agar kumpulan hasil tetap kecil, mempercepat pemuatan halaman, dan mendorong paginasi data per data.

  • 🔢 Perilaku Inti: LIMIT N mengembalikan paling banyak N baris. Tabel yang berisi baris kurang dari N akan mengembalikan semua baris tersebut, tanpa kesalahan.
  • 0️⃣ Kasus Nol: LIMIT 0 tidak mengembalikan baris apa pun, sehingga menjadikannya cara yang murah untuk memeriksa metadata kolom.
  • 📍 Sintaks Offset: LIMIT 1, 2 melewati satu baris dan mengembalikan dua baris, sehingga offset ditulis terlebih dahulu dan jumlah baris ditulis kedua.
  • 📄 Rumus Penomoran Halaman: OFFSET sama dengan ukuran halaman dikalikan dengan nomor halaman dikurangi satu, yang mengubah kumpulan hasil menjadi halaman bernomor.
  • ️ Ketergantungan Urutan: Tanpa ORDER BY, MySQL Dapat mengembalikan baris yang berbeda pada setiap eksekusi, sehingga LIMIT hanya deterministik jika diurutkan secara eksplisit.
  • ⚙️ Pernyataan Pendukung: LIMIT juga membatasi jumlah baris yang terpengaruh oleh UPDATE dan DELETE, sehingga melindungi tabel besar dari penulisan yang tidak terbatas.
  • 🐢 Catatan Kinerja: Offset yang besar menyebabkan MySQL Baca dan abaikan setiap baris yang dilewati, sehingga halaman yang dalam tumbuh lebih lambat.

MySQL LIMIT dan OFFSET

Apa arti kata kunci LIMIT dalam MySQL?

The MEMBATASI Kata kunci `limits` membatasi jumlah baris yang dikembalikan dalam hasil kueri. Kata kunci ini dapat digunakan dengan pernyataan SELECT, UPDATE, dan DELETE, sehingga membatasi jumlah baris yang dibaca oleh kueri serta jumlah baris yang dipengaruhi oleh penulisan.

Sintaks untuk kata kunci LIMIT adalah sebagai berikut.

SELECT {fieldname(s) | *} FROM tableName(s) [WHERE condition] LIMIT N;

SINI

  • “PILIH {nama bidang | *} DARI Nama tabel” adalah PILIH pernyataan berisi bidang yang ingin kami kembalikan dalam kueri kami.
  • “[Kondisi MANA]” bersifat opsional, tetapi jika diberikan, akan menentukan filter pada kumpulan hasil. klausa WHERE diterapkan sebelum LIMIT, jadi penyaringan terjadi terlebih dahulu dan batasan diterapkan pada apa yang lolos.
  • “BATAS N” adalah kata kuncinya, dan N N adalah angka apa pun yang dimulai dari 0. Memasukkan 0 sebagai batas tidak akan menghasilkan catatan sama sekali. Memasukkan angka seperti 5 akan menghasilkan lima catatan. Jika tabel berisi catatan kurang dari N, semua catatan akan dikembalikan dan tidak akan muncul kesalahan.

Sintaksnya singkat, tetapi alasan keberadaannya perlu dijelaskan sebelum contoh-contohnya.

Mengapa Kita Harus Menggunakan Kata Kunci LIMIT?

Misalkan kita sedang mengembangkanping Aplikasi yang berjalan di atas myflixdb. Para perancang sistem meminta kami untuk membatasi jumlah data yang ditampilkan per halaman menjadi 20 data, untuk mengatasi waktu pemuatan yang lambat. Bagaimana cara kami mengimplementasikan sistem yang memenuhi persyaratan tersebut?

Kata kunci LIMIT menangani situasi ini dengan tepat. Alih-alih menarik setiap baris anggota ke dalam aplikasi dan membuang sebagian besar di antaranya, kueri mengembalikan 20 catatan per halaman dan basis data yang melakukan pekerjaannya. Tiga manfaat berikut ini muncul dari hal tersebut.

  • Respon lebih cepat: Lebih sedikit data yang dibaca dari disk dan lebih sedikit data yang melewati jaringan.
  • Penggunaan memori lebih rendah: Aplikasi ini hanya menyimpan satu halaman baris, bukan seluruh tabel.
  • Safer menulis: BATASAN pada PEMBARUAN atau DELETE Pernyataan tersebut membatasi berapa banyak baris yang dapat terpengaruh oleh kesalahan.

MySQL Contoh Kueri LIMIT

Contoh-contoh di bawah ini dijalankan terhadap tabel anggota di basis data myflixdb. Contoh pertama mengembalikan dua baris dan tidak lebih.

SELECT * FROM members LIMIT 2;
Nomor keanggotaan nama lengkap jenis kelamin tanggal_lahir tanggal_pendaftaran alamat fisik alamat pos_ nomor kontak email nomor_kartu_kredit
1 Janet Jones Perempuan 21-07-1980 NULL Plot Jalan Pertama No 4 Tas Pribadi 0759 253 542 janetjones@yagoo.cm NULL
2 Janet Smith Jones Perempuan 23-06-1980 NULL Melrose 123 NULL NULL jj@fstreet.com NULL

Seperti yang ditunjukkan hasil di atas, hanya dua anggota yang telah dikembalikan.

Mendapatkan daftar sepuluh (10) anggota dari basis data

Misalkan kita menginginkan daftar 10 anggota terdaftar pertama dari basis data Myflix. Skrip di bawah ini meminta data tersebut.

SELECT * FROM members LIMIT 10;

Menjalankan skrip tersebut memberikan hasil seperti yang ditunjukkan di bawah ini.

Nomor keanggotaan nama lengkap jenis kelamin tanggal_lahir tanggal_pendaftaran alamat fisik alamat pos_ nomor kontak email nomor_kartu_kredit
1 Janet Jones Perempuan 21-07-1980 NULL Plot Jalan Pertama No 4 Tas Pribadi 0759 253 542 janetjones@yagoo.cm NULL
2 Janet Smith Jones Perempuan 23-06-1980 NULL Melrose 123 NULL NULL jj@fstreet.com NULL
3 Robert Phil Pria 12-07-1989 NULL Jalan ke-3 34 NULL 12345 rm@tstreet.com NULL
4 Gloria Williams Perempuan 14-02-1984 NULL Jalan ke-2 23 NULL NULL NULL NULL
5 Leonard Hofstadter Pria NULL NULL jambul kayu NULL 845738767 NULL NULL
6 Sheldon Cooper Pria NULL NULL jambul kayu NULL 976736763 NULL NULL
7 Rajesh Koothrappali Pria NULL NULL jambul kayu NULL 938867763 NULL NULL
8 Leslie Winkle Pria 14-02-1984 NULL jambul kayu NULL 987636553 NULL NULL
9 Howard Wolowitz Pria 24-08-1981 NULL Taman Selatan PO Box 4563 987786553 lwolowitz[at]email.me NULL

Hanya 9 anggota yang dikembalikan, karena N dalam klausa LIMIT lebih besar dari jumlah catatan dalam tabel. Meminta 9 baris secara eksplisit menghasilkan kumpulan hasil yang sama.

SELECT * FROM members LIMIT 9;

💡 Kiat: LIMIT memilih baris dari urutan apa pun yang dihasilkan server. Tambahkan sebuah DIPESAN OLEH klausa ini berlaku setiap kali identitas baris menjadi penting, jika tidak, "10 anggota pertama" tidak dijamin berarti sembilan orang yang sama dua kali.

Membatasi jumlah baris adalah bagian pertama dari fitur ini. Memilih di mana jendela dimulai adalah bagian kedua.

Menggunakan Nilai OFFSET dalam Kueri LIMIT

The OFFSET Nilai ini paling sering digunakan bersamaan dengan kata kunci LIMIT. Nilai ini menentukan baris mana yang menjadi titik awal pengambilan data oleh server, sehingga baris sebelum titik tersebut akan dilewati.

Misalkan kita menginginkan sejumlah anggota terbatas yang dimulai dari tengah tabel. Skrip di bawah ini dimulai dari baris kedua dan membatasi hasilnya menjadi dua catatan.

SELECT * FROM `members` LIMIT 1, 2;

Melaksanakannya di MySQL Workbench Pengujian terhadap myflixdb memberikan hasil sebagai berikut.

Nomor keanggotaan nama lengkap jenis kelamin tanggal_lahir tanggal_pendaftaran alamat fisik alamat pos_ nomor kontak email nomor_kartu_kredit
2 Janet Smith Jones Perempuan 23-06-1980 NULL Melrose 123 NULL NULL jj@fstreet.com NULL
3 Robert Phil Pria 12-07-1989 NULL Jalan ke-3 34 NULL 12345 rm@tstreet.com NULL

Perhatikan bahwa di sini OFFSET = 1, oleh karena itu baris #2 adalah baris pertama yang dikembalikan, dan BATAS = 2, oleh karena itu hanya 2 catatan yang kembali.

Dalam bentuk dua argumen, offset ditulis terlebih dahulu dan jumlah baris kedua, yang mudah terbalik secara tidak sengaja. MySQL juga menerima bentuk eksplisit yang menghilangkan ambiguitas, dan ini adalah bentuk yang lebih disukai dalam kode baru.

SELECT * FROM `members` LIMIT 2 OFFSET 1;

Kedua pernyataan tersebut mengembalikan dua baris yang sama. Dengan memahami offset, pola paginasi yang diandalkan oleh setiap layar daftar akan langsung terlihat darinya.

Cara Melakukan Paginasi Hasil Kueri dengan LIMIT dan OFFSET

Paginasi membagi kumpulan hasil yang besar menjadi halaman-halaman bernomor, dan LIMIT bersama dengan OFFSET adalah mekanisme yang melakukannya. Dua nilai menggerakkan setiap permintaan halaman: ukuran halaman, yaitu berapa banyak catatan yang muncul di satu layar, dan nomor halaman yang diminta oleh pengguna.

Selisih tersebut diperoleh dari nilai-nilai tersebut dengan menggunakan satu rumus tunggal.

-- OFFSET = page_size * (page_number - 1)
SELECT membership_number, full_names
FROM members
ORDER BY membership_number ASC
LIMIT 20 OFFSET 0;   -- page 1

Halaman 2 mempertahankan batas yang sama dan menggeser offset ke depan satu ukuran halaman.

SELECT membership_number, full_names
FROM members
ORDER BY membership_number ASC
LIMIT 20 OFFSET 20;  -- page 2

Tiga aturan menjaga agar daftar berhalaman tetap akurat dan cepat.

  1. Selalu urutkan: Kueri berhalaman tanpa ORDER BY dapat menampilkan catatan yang sama di dua halaman berbeda dan menyembunyikan catatan lainnya sepenuhnya, karena server bebas mengubah urutan baris di antara panggilan.
  2. Urutkan berdasarkan kolom unik: Nilai yang sama pada kolom pengurutan menyebabkan urutan baris yang sama menjadi tidak terdefinisi. Pengurutan berdasarkan kunci utama, atau menambahkannya sebagai penentu urutan jika terjadi kesamaan nilai, akan menghilangkan masalah ini.
  3. Lihat halaman-halaman yang lebih dalam: OFFSET 100000 gaya MySQL Membaca seratus ribu baris dan membuangnya sebelum mengembalikan dua puluh baris berikutnya. Waktu respons meningkat seiring dengan nomor halaman.

Untuk paginasi yang sangat mendalam, paginasi berbasis keyset sepenuhnya menghindari offset. Alih-alih menghitung baris yang akan dilewati, kueri mengingat kunci terakhir dari halaman sebelumnya dan meminta baris setelahnya.

SELECT membership_number, full_names
FROM members
WHERE membership_number > 20      -- last id from the previous page
ORDER BY membership_number ASC
LIMIT 20;

Bentuk ini tetap cepat pada kedalaman berapa pun, karena indeks langsung melompat ke kunci awal daripada menelusuri baris di depannya. Kelemahannya adalah halaman harus ditelusuri secara berurutan, jadi lompatan...ping Mengakses langsung halaman 500 sudah tidak memungkinkan lagi.

BATAS dalam MySQL vs TOP dan FETCH FIRST

LIMIT bukanlah bagian dari setiap dialek SQL, yang menjadi penting begitu sebuah kueri harus berpindah antar mesin basis data. MySQL, PostgreSQL, dan SQLite sama-sama menggunakan kata kunci LIMIT. SQL Server menggunakan TOP, dan Oracle menggunakan klausa FETCH FIRST standar. Tabel di bawah ini membandingkan ketiganya.

Ayat Mesin Example Melewati baris
BATAS … PENGHAPUSAN MySQL, PostgreSQL, SQLite SELECT * FROM members LIMIT 20 OFFSET 40; Ya, dengan OFFSET
TOP SQL Server SELECT TOP 20 * FROM members; Tidak, OFFSET … FETCH diperlukan
AMBIL PERTAMA Oracle, Db2, SQL standar SELECT * FROM members FETCH FIRST 20 ROWS ONLY; Ya, dengan OFFSET … ROWS

Perilakunya sama dalam setiap kasus: batasi jumlah baris dan, secara opsional, lewati sejumlah baris terlebih dahulu. Hanya ejaannya yang berubah. Oleh karena itu, kueri yang harus dijalankan pada lebih dari satu mesin harus mengisolasi klausa pembatasan baris daripada menyebarkannya di seluruh basis kode.

Pertanyaan Umum Demo Slot

Ya. Keduanya menerima jumlah baris biasa, seperti DELETE FROM members LIMIT 10. Bentuk offset dengan dua argumen tidak diperbolehkan di sana, jadi hanya jumlah baris yang terpengaruh yang dapat dibatasi.

Offset dihitung dari nol, jadi OFFSET 0 dimulai dari baris pertama dan OFFSET 1 dimulai dari baris kedua. Jumlah baris itu sendiri adalah kuantitas biasa dan dibaca sebagai angka normal.

Jalankan perintah SELECT COUNT(*) terpisah dengan klausa WHERE yang sama tetapi tanpa LIMIT. Perintah count memberi tahu aplikasi berapa banyak halaman yang ada, sedangkan perintah limited mengembalikan jumlah baris untuk halaman saat ini.

Seringkali, ya. Asisten AI di dalam klien seperti MySQL Workbench Ubah kueri OFFSET menjadi klausa WHERE pada kunci terakhir yang terlihat. Konfirmasikan bahwa kolom pengurutan unik dan terindeks sebelum Anda mempercayai penulisan ulang tersebut.

Karena pernyataan yang dihasilkan biasanya menghilangkan ORDER BY. Tanpa pengurutan eksplisit, MySQL Fungsi ini dapat mengembalikan baris dalam urutan apa pun, sehingga LIMIT yang sama dapat menghasilkan sampel yang berbeda pada setiap eksekusi. Tambahkan pengurutan sendiri.

Ringkaslah postingan ini dengan: