Uma Sequência Numérica
Parte da seção Além do Básico do Journey de SQL da Coddy — lição 20 de 27.
Você conheceu a palavra-chave WITH em Fundamentals para nomear uma subconsulta, também conhecida como CTE (Common Table Expression). Uma CTE recursive vai um passo além: ela permite que a subconsulta se refira a si mesma, construindo um resultado linha por linha.
A versão mais simples gera uma sequência de números sem uma tabela subjacente. O formato é sempre o mesmo:
WITH RECURSIVE counter(n) AS (
SELECT 1 -- âncora: a linha inicial
UNION ALL
SELECT n + 1 FROM counter WHERE n < 5 -- recursivo: constrói o próximo a partir do último
)
SELECT n FROM counterLeia como: comece com n = 1, depois continue adicionando linhas onde cada n é o n + 1 anterior, parando quando o WHERE deixar de corresponder. O resultado é 1, 2, 3, 4, 5.
As duas partes do corpo são unidas por UNION ALL. A primeira é o anchor: as linhas-semente. A segunda é o recursive step: ela consulta a própria CTE.
Desafio
FácilEscreva uma CTE recursiva chamada powers com duas colunas:
i: o índice de iteração, começando em1p:2elevado ài-ésima potência (2,4,8, …)
Pare assim que p exceder 1000. Retorne ambas as colunas, ordenadas por i de forma crescente.
Experimente você mesmo
WITH RECURSIVE powers(i, p) AS (
-- âncora: i=1, p=2
-- recursivo: i+1, p*2, até p atingir 1000
)
SELECT i, p FROM powers ORDER BY i
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.