LIMIT, OFFSET e FETCH FIRST
Sintassi della paginazione in MySQL, Postgres e SQL Server
LIMIT, OFFSET e FETCH FIRST è una lezione Coding Interview Prep gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Coding Interview Prep, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Coding Interview Prep include 4 lezioni in totale.
La paginazione dipende dal dialetto SQL
La domanda "Come recupererebbe le prime 10 righe?" sembra banale, finché l'intervistatore non aggiunge "e lo faccia in SQL standard" oppure "ora in SQL Server". La sintassi per limitare il numero di righe è una delle funzionalità più frammentate tra i database.
Questa lezione presenta le tre forme principali: LIMIT (MySQL/Postgres/SQLite), OFFSET ... FETCH (standard ANSI, SQL Server) e il più datato TOP (SQL Server).
LIMIT in MySQL e PostgreSQL
La forma più comune è LIMIT n, che limita il risultato a n righe. È supportata da MySQL, PostgreSQL e SQLite.
È importante ricordare che LIMIT viene applicato dopo ORDER BY nell'ordine logico di esecuzione, quindi quasi sempre le due clausole vengono usate insieme. Limitare le righe senza ordinarle restituisce un insieme arbitrario.
SELECT name, salary
FROM employees
ORDER BY salary DESC
LIMIT 10;OFFSET per saltare le righe
La paginazione richiede un offset per saltare le pagine precedenti. OFFSET m salta le prime m righe prima che venga applicato il limite.
Per ottenere la pagina 3 con una dimensione di 10 righe, si saltano 20 righe e se ne prendono 10. La formula generale è OFFSET = (page - 1) * page_size.
SELECT name, salary
FROM employees
ORDER BY salary DESC
LIMIT 10 OFFSET 20;La sintassi con virgola di MySQL
MySQL accetta anche una forma con due argomenti separati da virgola: LIMIT offset, count. Si noti che l'ordine è invertito rispetto alla forma con parole chiave, un dettaglio che crea spesso confusione.
LIMIT 20, 10 significa saltare 20 righe e prenderne 10, esattamente come LIMIT 10 OFFSET 20. Nei colloqui, è preferibile la forma con parole chiave perché è più chiara.
SELECT name, salary
FROM employees
ORDER BY salary DESC
LIMIT 20, 10;Lo standard ANSI: FETCH FIRST
Lo standard SQL usa OFFSET ... ROWS FETCH FIRST ... ROWS ONLY. PostgreSQL, Oracle 12c+, DB2 e SQL Server 2012+ supportano tutti questa sintassi.
La forma è verbosa, ma rappresenta la scelta più portabile. ROW e ROWS sono intercambiabili; FIRST e NEXT sono sinonimi.
SELECT name, salary
FROM employees
ORDER BY salary DESC
OFFSET 20 ROWS
FETCH FIRST 10 ROWS ONLY;SQL Server TOP
Il codice meno recente di SQL Server usa TOP n subito dopo SELECT. Non dispone di un offset integrato, quindi da solo non può paginare oltre la prima pagina.
In un colloquio potrebbe essere richiesto di convertire TOP nel formato standard. SELECT TOP 10 con ORDER BY equivale a FETCH FIRST 10 ROWS ONLY.
SELECT TOP 10 name, salary
FROM employees
ORDER BY salary DESC;TOP WITH TIES
Una funzionalità interessante di SQL Server: TOP n WITH TIES restituisce righe aggiuntive quando sono a pari merito con l'ultima riga in base alla chiave di ORDER BY.
Se tre persone condividono il decimo stipendio più alto, TOP 10 WITH TIES le restituisce tutte, arrivando eventualmente a 12 righe. Nel linguaggio standard, l'equivalente è FETCH FIRST ... WITH TIES.
SELECT TOP 10 WITH TIES name, salary
FROM employees
ORDER BY salary DESC;ORDER BY è obbligatorio per una paginazione deterministica
Il punto più importante da ricordare per un colloquio è questo: OFFSET/LIMIT senza un ORDER BY deterministico non è sicuro. Il motore potrebbe scegliere righe diverse per la «pagina 2» rispetto a quelle scelte per la «pagina 1», perché l'ordine sottostante non è definito.
Ordini sempre in base a un insieme di chiavi univoco, o sufficientemente univoco. Se la colonna di ordinamento contiene duplicati, aggiunga la chiave primaria come criterio di spareggio, così le pagine non si sovrapporranno e non salteranno righe.
SELECT id, name, salary
FROM employees
ORDER BY salary DESC, id ASC
LIMIT 10 OFFSET 20;Perché la paginazione con OFFSET scala male
Gli intervistatori esperti verificano anche le prestazioni. Un OFFSET elevato costringe comunque il database a generare e scartare tutte le righe saltate. OFFSET 100000 LIMIT 10 legge 100.010 righe per restituirne 10.
Il costo cresce linearmente con il numero della pagina, rendendo lenta la paginazione profonda nelle tabelle di grandi dimensioni.
Paginazione keyset (seek)
L'alternativa scalabile è la paginazione keyset: invece di saltare righe in base al conteggio, si filtrano le righe successive all'ultimo valore visualizzato. In questo modo si utilizza una scansione di un intervallo dell'indice e le prestazioni rimangono elevate a qualsiasi profondità.
Si conserva la chiave di ordinamento dell'ultima riga della pagina precedente e si richiedono le righe successive. Menzionare la paginazione keyset è un forte segnale di esperienza senior.
SELECT id, name, created_at
FROM events
WHERE created_at < '2026-01-01 10:00:00'
ORDER BY created_at DESC
LIMIT 10;Promemoria per dialetto
Memorizzi questa tabella per rispondere rapidamente durante un colloquio:
- MySQL / Postgres / SQLite:
LIMIT n OFFSET m - Standard / SQL Server 2012+ / Oracle 12c+:
OFFSET m ROWS FETCH FIRST n ROWS ONLY - SQL Server meno recente:
SELECT TOP n(senza offset) - Oracle meno recente (prima della versione 12c): applicare un filtro su
ROWNUMin una sottoquery
Controllo rapido
Scelga la query corretta per la pagina 3 con una dimensione di pagina pari a 10.
Riepilogo
Elementi essenziali della paginazione:
LIMIT/OFFSETper MySQL, Postgres e SQLite;OFFSET ... FETCH FIRSTper lo standard e le versioni moderne di SQL Server;TOPper le versioni legacy di SQL Server.OFFSET = (page - 1) * page_size.- Lo abbini sempre a un
ORDER BYdeterministico, aggiungendo un criterio di spareggio univoco. - Gli offset elevati sono lenti; per la paginazione profonda preferisca la paginazione keyset.
Domande Frequenti
La lezione «LIMIT, OFFSET e FETCH FIRST» è gratuita?
Sì — il testo completo di «LIMIT, OFFSET e FETCH FIRST» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Coding Interview Prep, passa a CoddyKit PRO. Il corso Coding Interview Prep include 4 lezioni in totale.
Cosa imparerò in «LIMIT, OFFSET e FETCH FIRST»?
Sintassi della paginazione in MySQL, Postgres e SQL Server Eserciti Coding Interview Prep con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Coding Interview Prep?
Non è richiesta alcuna esperienza precedente. Coding Interview Prep su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «LIMIT, OFFSET e FETCH FIRST»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Coding Interview Prep?
Sì. Ogni lezione Coding Interview Prep include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Ordinamento su più colonne e posizione dei NULL
- LIMIT, OFFSET e FETCH FIRST
- Restituire in modo affidabile le righe Top-N
- Ordinare per espressioni e alias