0Pricing
SQL Interview Prep · Lezione

LIMIT, OFFSET e FETCH FIRST

Sintassi della paginazione in MySQL, Postgres e SQL Server

LIMIT, OFFSET e FETCH FIRST è una lezione SQL 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 SQL Interview Prep, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL 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 ROWNUM in 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/OFFSET per MySQL, Postgres e SQLite; OFFSET ... FETCH FIRST per lo standard e le versioni moderne di SQL Server; TOP per le versioni legacy di SQL Server.
  • OFFSET = (page - 1) * page_size.
  • Lo abbini sempre a un ORDER BY deterministico, 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 SQL Interview Prep, passa a CoddyKit PRO. Il corso SQL 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 SQL 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 SQL Interview Prep?

Non è richiesta alcuna esperienza precedente. SQL 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 SQL Interview Prep?

Sì. Ogni lezione SQL 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

  1. Ordinamento su più colonne e posizione dei NULL
  2. LIMIT, OFFSET e FETCH FIRST
  3. Restituire in modo affidabile le righe Top-N
  4. Ordinare per espressioni e alias
← Torna a SQL Interview Prep