Documentazione di PostgreSQL 9.0 > Il linguaggio SQL > Query > LIMIT e OFFSET
PrecedenteClassificazione di righeElenci VALUESSuccessivo

7.6. LIMIT e OFFSET

LIMIT e OFFSET permettono di ricavare giusto una porzione delle righe che sono generate dal resto della query:

SELECT select_list
    FROM table_expression
    [ ORDER BY ... ]
    [ LIMIT { number | ALL } ] [ OFFSET number ]

Se viene specificato un limite, non più di quelle righe saranno restituite (ma possibilmente meno, se la query stessa produce meno righe). LIMIT ALL è lo stesso che omettere la clausola LIMIT.

OFFSET dice di saltare quel numero di righe prima di iniziare a restituire righe. OFFSET 0 è lo stesso che omettere la clausola OFFSET, e LIMIT NULL è lo stesso di omettere la clausola LIMIT. Se sia OFFSET che LIMIT appaiono, allora OFFSET righe sono saltate prima di cominciare a contare le LIMIT righe che sono restituite.

Quando si usa LIMIT, è importante usare una clausola ORDER BY che costringe le righe risultanti ad avere un ordinamento unico. Altrimenti si otterrà un sottoinsieme imprevedibile di righe della query. Si potrebbero volere dalla decima alla ventesima riga, ma dalla decima alla ventesima in quale ordine? L'ordinamento è sconosciuto, a meno che non sia specificato con ORDER BY.

L'ottimizzatore della query prende in considerazione LIMIT quando genera un piano della query, per cui è molto probabile ottenere diversi piani (contenenti diversi ordinamenti delle righe) in funzione di cosa viene dato a LIMIT e OFFSET. Quindi, usando differenti valori di LIMIT/OFFSET per selezionare diversi sottoinsiemi del risultato di una query si otterrenno risultati inconsistenti a meno che non si imponga un risultato prevedibile ordinando con ORDER BY. Questo non è un bug; è una conseguenza relativa al fatto che SQL non promette di consegnare il risultato di una query in un particolare ordine a meno che non venga utilizzato ORDER BY per vincolare l'ordine.

Le righe saltate da una clausola OFFSET devono sempre essere calcolate all'interno del server; altrimento un OFFSET grande potrebbe essere inefficiente.

Documentazione di PostgreSQL 9.0 > Il linguaggio SQL > Query > LIMIT e OFFSET
PrecedenteClassificazione di righeElenci VALUESSuccessivo