Menu
Coddy logo textTech

Una sequenza di numeri

Fa parte della sezione Oltre le basi del percorso SQL di Coddy. Lezione 20 di 27.

Hai incontrato la parola chiave WITH in Fondamenti per dare un nome a una sottoquery, nota anche come CTE (espressione di tabella comune). Una CTE ricorsiva fa un passo in più: permette alla sottoquery di fare riferimento a sé stessa, costruendo un risultato riga per riga.

La versione più semplice genera una sequenza di numeri senza una tabella sottostante. La struttura è sempre la stessa:

WITH RECURSIVE counter(n) AS (
    SELECT 1                              -- caso base: la riga iniziale
    UNION ALL
    SELECT n + 1 FROM counter WHERE n < 5 -- ricorsivo: costruisce la riga successiva a partire dall'ultima
)
SELECT n FROM counter

Leggilo così: inizia con n = 1, poi continua ad aggiungere righe in cui ogni n è il precedente n + 1, fermandoti quando WHERE non corrisponde più. Il risultato è 1, 2, 3, 4, 5.

Le due parti del corpo sono unite da UNION ALL. La prima è l'ancora: le righe iniziali. La seconda è il passaggio ricorsivo: interroga la CTE stessa.

challenge icon

Sfida

Facile

Scrivi una CTE ricorsiva chiamata powers con due colonne:

  • i: l’indice di iterazione, a partire da 1
  • p: 2 elevato alla potenza i-esima (2, 4, 8, …)

Fermati quando p supererebbe 1000. Restituisci entrambe le colonne, ordinate in modo crescente per i.

Provalo tu

WITH RECURSIVE powers(i, p) AS (
    -- caso base: i=1, p=2
    -- passo ricorsivo: i+1, p*2, finché p raggiunge 1000
)
SELECT i, p FROM powers ORDER BY i
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Oltre le basi

Esercitati da solo: Playground SQL