CodeGym /Corsi /SQL SELF /Uso di OFFSET per saltare le righe e costruire la paginaz...

Uso di OFFSET per saltare le righe e costruire la paginazione

SQL SELF
Livello 3 , Lezione 1
Disponibile

Lascia che ti faccia una domanda: cosa fai quando su un sito di e-commerce trovi troppi prodotti in una sola pagina? Esatto, apri la pagina successiva. E cosa succede dietro le quinte? Lì funziona la magia di SQL — viene usato il comando OFFSET per saltare le righe. Oggi scoprirai cos'è OFFSET, a cosa serve, come si usa e perché è la base per costruire la paginazione dei dati.

OFFSET — è una parola chiave in SQL che ti permette di saltare un certo numero di righe nei risultati della query. È come sfogliare le pagine di un libro: puoi "saltare" le prime 10 righe e iniziare a vedere dalla riga 11.

Sintassi

SELECT colonna1, colonna2
FROM tabella
OFFSET numero_righe;
  • OFFSET — parola chiave per saltare le righe.
  • numero_righe — quante righe vuoi saltare.

Esempio semplice di utilizzo di OFFSET

Supponiamo di avere una tabella students con questi dati:

id name age
1 Alisa 22
2 Bob 24
3 Klara 23
4 Dan 21
5 Eva 25

Vogliamo mostrare tutti gli studenti a partire dal terzo. Per farlo possiamo usare questa query:

SELECT *
FROM students
OFFSET 2;

Risultato:

id name age
3 Klara 23
4 Dan 21
5 Eva 25

SQL ha "saltato" le prime due righe (Alisa e Bob) e ha dato il risultato a partire dalla terza riga. Proprio come usare un segnalibro: "questa pagina l'abbiamo già letta, apriamo la prossima".

Combinare OFFSET con LIMIT

OFFSET di solito si usa insieme a LIMIT. Così puoi sia saltare le righe che limitare il risultato al numero di record che ti serve. Questo è super utile per la paginazione (page — pagina) — mostrare i dati a porzioni, qualche riga alla volta.

Supponiamo di voler mostrare 2 record alla volta e partire dalla terza riga. La query sarà così:

SELECT *
FROM students
LIMIT 2 
OFFSET 2;

Risultato:

id name age
3 Klara 23
4 Dan 21

Logica di funzionamento:

  1. OFFSET 2 salta le prime due righe: Alisa e Bob.
  2. LIMIT 2 prende solo due righe tra quelle rimaste.

Costruire la paginazione

Ora arriviamo alla parte più interessante — costruire la paginazione. Immagina di fare una web app con la lista degli studenti. In ogni pagina vuoi mostrare 2 record. Come si fa?

Principio base:

  • La prima pagina salta 0 righe: OFFSET 0.
  • La seconda pagina salta 2 righe: OFFSET 2.
  • La terza pagina salta 4 righe: OFFSET 4.
  • E così via...

Esempio: mostra la seconda pagina

Nella prima pagina ci sono i record 1 e 2 (Alisa e Bob). Nella seconda pagina — i record 3 e 4 (Klara e Dan).

SELECT *
FROM students
ORDER BY id
LIMIT 2 
OFFSET 2;

Risultato:

id name age
3 Klara 23
4 Dan 21

Esempio: mostra la terza pagina

Nella terza pagina — i record 5 e 6 (se esistono).

SELECT *
FROM students
ORDER BY id
LIMIT 2 
OFFSET 4;

Risultato:

id name age
5 Eva 25

Formula per calcolare OFFSET

Quando costruisci sistemi di paginazione puoi usare questa formula per automatizzare:

OFFSET = (numero_pagina - 1) * numero_record_per_pagina

Per esempio:

  • Per la prima pagina: (1 - 1) * 2 = 0.
  • Per la seconda pagina: (2 - 1) * 2 = 2.
  • Per la terza pagina: (3 - 1) * 2 = 4.

Note importanti sulle performance

Quando lavori con tabelle grandi, usare OFFSET può diventare poco efficiente, soprattutto nelle pagine avanzate. Il motivo è che PostgreSQL comunque scorre tutte le righe che vengono saltate. Per esempio, una query con OFFSET 10000 costringe il DBMS a passare tutte le prime 10.000 righe prima di restituire i risultati. In questi casi puoi pensare ad alternative, come usare un identificatore unico come marcatore di paginazione.

Alternativa: paginazione con il cursore

Per ottimizzare puoi usare il metodo del "cursore". Invece di saltare le righe con OFFSET, puoi ricordare l'id dell'ultima riga ottenuta nella pagina precedente e usarlo per costruire la query successiva:

SELECT *
FROM students
WHERE id > ultimo_id_mostrato
ORDER BY id
LIMIT 2;

Questo metodo può velocizzare molto il lavoro con tabelle grandi.

Applicazioni pratiche della paginazione

La paginazione si usa nella maggior parte delle web app: e-commerce, blog, pannelli di amministrazione. Per esempio:

  • Mostrare la lista dei prodotti in un e-commerce;
  • Mostrare la lista degli utenti in un sistema CRM;
  • Mostrare le news a pagine.

La paginazione può essere utile anche quando analizzi grandi quantità di dati, per lavorare a piccole porzioni.

Errori tipici nell'uso di OFFSET

Lavorare con OFFSET a volte crea problemi, soprattutto quando si sta imparando. Ecco alcuni errori comuni:

Mancanza di ordinamento. Se non aggiungi ORDER BY, l'ordine delle righe nei risultati di OFFSET può essere imprevedibile.

Query sbagliata:

SELECT * FROM students
OFFSET 5;

Query corretta:

SELECT * FROM students
ORDER BY id
OFFSET 5;

Valore OFFSET sbagliato. Se metti un valore troppo grande, il risultato sarà un set vuoto.

Problemi di performance. Come abbiamo detto prima, usare OFFSET grandi nelle pagine avanzate può essere inefficiente.

Mancanza di filtri. Se usi OFFSET e LIMIT senza filtri (WHERE), puoi ottenere dati inutili, il che può peggiorare le performance.

Ordine degli operatori. L'ordine degli operatori in SQL è fisso: prima LIMIT, poi OFFSET. Puoi omettere (non scrivere) gli operatori, ma non puoi cambiare l'ordine.

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION