LIMIT, OFFSET dan FETCH FIRST
Sintaks penomboran merentas MySQL, Postgres dan SQL Server
LIMIT, OFFSET dan FETCH FIRST ialah pelajaran Persediaan Temu Duga Pengaturcaraan percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Persediaan Temu Duga Pengaturcaraan, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Persediaan Temu Duga Pengaturcaraan merangkumi sejumlah 4 pelajaran.
Penomboran Halaman ialah Soalan Merentas Dialek
"Bagaimanakah anda mendapatkan 10 baris pertama?" kedengaran mudah sehingga penemuduga menambah "dan lakukannya dalam SQL standard" atau "sekarang dalam SQL Server." Sintaks untuk mengehadkan baris ialah antara ciri yang paling berbeza-beza merentas pangkalan data.
Pelajaran ini memetakan tiga bentuk utama: LIMIT (MySQL/Postgres/SQLite), OFFSET ... FETCH (piawaian ANSI, SQL Server), dan TOP yang lebih lama (SQL Server).
LIMIT dalam MySQL dan PostgreSQL
Bentuk yang paling biasa ialah LIMIT n, yang mengehadkan hasil kepada maksimum n baris. Ia disokong oleh MySQL, PostgreSQL dan SQLite.
Yang penting, LIMIT digunakan selepas ORDER BY mengikut susunan pelaksanaan logik, jadi anda hampir sentiasa menggabungkan kedua-duanya. Mengehadkan baris tanpa mengisih memberikan anda set baris yang sembarangan.
SELECT name, salary
FROM employees
ORDER BY salary DESC
LIMIT 10;OFFSET untuk Melangkau Baris
Penomboran halaman memerlukan offset untuk melangkau halaman sebelumnya. OFFSET m melangkau m baris pertama sebelum had digunakan.
Untuk mendapatkan halaman 3 dengan saiz halaman 10, anda melangkau 20 baris dan mengambil 10 baris. Formula umum ialah OFFSET = (page - 1) * page_size.
SELECT name, salary
FROM employees
ORDER BY salary DESC
LIMIT 10 OFFSET 20;Sintaks Koma MySQL
MySQL juga menerima bentuk koma dengan dua argumen: LIMIT offset, count. Perhatikan bahawa susunannya diterbalikkan berbanding bentuk kata kunci, yang sering mengelirukan.
LIMIT 20, 10 bermaksud melangkau 20 baris, kemudian mengambil 10 baris, sama seperti LIMIT 10 OFFSET 20. Utamakan bentuk kata kunci untuk kejelasan dalam temu duga.
SELECT name, salary
FROM employees
ORDER BY salary DESC
LIMIT 20, 10;Piawaian ANSI: FETCH FIRST
Piawaian SQL menggunakan OFFSET ... ROWS FETCH FIRST ... ROWS ONLY. PostgreSQL, Oracle 12c+, DB2 dan SQL Server 2012+ semuanya menyokongnya.
Bentuk ini kelihatan panjang tetapi merupakan pilihan yang serasi merentas pangkalan data. ROW dan ROWS boleh saling ditukar; FIRST dan NEXT ialah sinonim.
SELECT name, salary
FROM employees
ORDER BY salary DESC
OFFSET 20 ROWS
FETCH FIRST 10 ROWS ONLY;SQL Server TOP
Kod SQL Server yang lebih lama menggunakan TOP n sejurus selepas SELECT. Kod ini tidak mempunyai OFFSET terbina dalam, jadi kod ini sendiri tidak boleh menomborkan halaman melepasi halaman pertama.
Penemuduga mungkin meminta Anda menukar TOP kepada bentuk piawai. SELECT TOP 10 dengan ORDER BY bersamaan dengan FETCH FIRST 10 ROWS ONLY.
SELECT TOP 10 name, salary
FROM employees
ORDER BY salary DESC;TOP WITH TIES
Ciri SQL Server yang menarik: TOP n WITH TIES mengembalikan baris tambahan apabila baris tersebut seri dengan baris terakhir berdasarkan kunci ORDER BY.
Jika tiga orang menerima gaji tertinggi ke-10 yang sama, TOP 10 WITH TIES mengembalikan kesemuanya, mungkin sebanyak 12 baris. Ini bersamaan dengan FETCH FIRST ... WITH TIES dalam piawai.
SELECT TOP 10 WITH TIES name, salary
FROM employees
ORDER BY salary DESC;ORDER BY Wajib untuk Penomboran Halaman Deterministik
Perkara paling penting dalam temu duga di sini: OFFSET/LIMIT tanpa ORDER BY yang deterministik adalah tidak selamat. Enjin mungkin memilih baris yang berbeza untuk "halaman 2" berbanding "halaman 1" kerana susunan asas tidak ditakrifkan.
Sentiasa isih berdasarkan set kunci yang unik atau cukup unik. Jika lajur isihan Anda mempunyai pendua, tambahkan kunci primer sebagai pemutus seri supaya halaman tidak bertindih atau melangkau baris.
SELECT id, name, salary
FROM employees
ORDER BY salary DESC, id ASC
LIMIT 10 OFFSET 20;Mengapa Penomboran Halaman dengan OFFSET Berskala Buruk
Penemuduga berpengalaman akan meneliti prestasi. OFFSET yang besar masih memaksa pangkalan data menjana dan membuang semua baris yang dilangkau. OFFSET 100000 LIMIT 10 membaca 100,010 baris untuk mengembalikan 10 baris.
Kosnya meningkat secara linear mengikut nombor halaman, menyebabkan penomboran halaman yang jauh menjadi perlahan pada jadual besar.
Penomboran Halaman Berasaskan Kunci (Carian)
Alternatif yang boleh diskalakan ialah penomboran halaman berasaskan kunci: bukannya melangkau berdasarkan bilangan, Anda menapis nilai selepas nilai terakhir yang dilihat. Kaedah ini menggunakan imbasan julat indeks dan kekal pantas pada apa-apa kedalaman.
Anda menyimpan kunci isihan baris terakhir daripada halaman sebelumnya, kemudian meminta baris selepas kunci tersebut. Menyebut penomboran halaman berasaskan kunci menunjukkan pengalaman peringkat kanan yang kukuh.
SELECT id, name, created_at
FROM events
WHERE created_at < '2026-01-01 10:00:00'
ORDER BY created_at DESC
LIMIT 10;Ringkasan Pantas Mengikut Dialek
Hafal jadual ini untuk mengingatinya dengan pantas semasa temu duga:
- MySQL / Postgres / SQLite:
LIMIT n OFFSET m - Piawai / SQL Server 2012+ / Oracle 12c+:
OFFSET m ROWS FETCH FIRST n ROWS ONLY - SQL Server Lama:
SELECT TOP n(tanpa OFFSET) - Oracle Lama (sebelum 12c): tapis berdasarkan
ROWNUMdalam subpertanyaan
Semakan Pantas
Pilih pertanyaan halaman ke-3 yang betul untuk saiz halaman 10.
Imbas Kembali
Asas penomboran halaman:
LIMIT/OFFSETuntuk MySQL, Postgres, SQLite;OFFSET ... FETCH FIRSTuntuk piawai dan SQL Server moden;TOPuntuk SQL Server lama.OFFSET = (page - 1) * page_size.- Sentiasa gabungkan dengan
ORDER BYdeterministik dan tambahkan pemutus seri unik. - OFFSET yang besar adalah perlahan; utamakan penomboran halaman berasaskan kunci untuk penomboran halaman yang jauh.
Pelajari Persediaan Temu Duga Pengaturcaraan dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 90
- Pelajaran
- 360
Soalan Lazim
Adakah pelajaran “LIMIT, OFFSET dan FETCH FIRST” percuma?
Ya — teks penuh “LIMIT, OFFSET dan FETCH FIRST” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Persediaan Temu Duga Pengaturcaraan, tingkat taraf kepada CoddyKit PRO. Kursus Persediaan Temu Duga Pengaturcaraan merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “LIMIT, OFFSET dan FETCH FIRST”?
Sintaks penomboran merentas MySQL, Postgres dan SQL Server Anda berlatih Persediaan Temu Duga Pengaturcaraan menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Persediaan Temu Duga Pengaturcaraan?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Persediaan Temu Duga Pengaturcaraan di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “LIMIT, OFFSET dan FETCH FIRST” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Persediaan Temu Duga Pengaturcaraan ini?
Ya. Setiap pelajaran Persediaan Temu Duga Pengaturcaraan menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Pengisihan Pelbagai Lajur dan Peletakan NULL
- LIMIT, OFFSET dan FETCH FIRST
- Mengembalikan Baris Teratas-N Dengan Boleh Dipercayai
- Mengisih Mengikut Ungkapan dan Alias