Saltar al contenido

Consultas recursivas

SQL · Unidad 10: WITH y conjuntos

En la empresa, cada unión de empleados consigo misma subía un escalón, de una persona a su jefe. Para llegar de Rita a Carmen hicieron falta dos, porque sabías que eran dos escalones. ¿Y si no sabes cuántos hay? Hace falta una consulta que se repita sola.

La más pequeña cuenta. WITH RECURSIVE abre un paso que lee de sí mismo. Tiene un punto de partida, el 1, después UNION ALL, y una consulta que toma la última fila y fabrica la siguiente. El WHERE se le pregunta a la fila de la que se parte. Con el 4 se cumple, y nace el 5. Con el 5 ya no, y ahí termina.

WITH RECURSIVE numeros AS (
  SELECT 1 AS n
  UNION ALL
  SELECT n + 1
  FROM numeros
  WHERE n < 5
)
SELECT n
FROM numeros;

Devuelve

n
1
2
3
4
5

El resto de la explicación está en la lección, que es del plan completo.

Ejercicios de esta lección

Se hacen en la app, que los corrige al momento y explica por qué.

  1. 1. Predice la salida

    ¿Qué devuelve esta consulta?

  2. 2. Ordena las líneas

    Ordena la consulta que cuenta del 1 al 10, ni un número más. Sobran dos líneas.

  3. 3. Encuentra el bug

    Otra cuenta regresiva, del 5 al 1. La cuenta sube en vez de bajar, y no para. La app enseña las primeras 1000 filas y corta. ¿Qué línea tiene el problema?

  4. 4. Opción múltiple

    La consulta que sube desde Fabio no lleva ningún WHERE que la pare. ¿Por qué termina al llegar a Carmen?

  5. 5. Predice la salida

    Greta es la ilustradora, la única persona de Marca. Su jefe_id es 1, el de Carmen. El de Carmen está vacío. ¿Qué devuelve esta consulta?

  6. 6. Completa el código

    La cadena de Lidia, que es programadora y depende de Paula. Completa de dónde lee la consulta que se repite.

  7. 7. Predice la salida

    A Carmen le apuntan con su jefe_id tres personas, Marco, Paula y Greta. A Marco, dos. A Paula, tres. A los demás, nadie. ¿Qué devuelve esta consulta?

  8. 8. Ordena las líneas

    Rita gana 1900, y le han prometido 150 más cada año. ¿En qué año alcanza los 2600 que gana Fabio? Ordena la consulta que da el año y el salario de cada año, hasta el primero en que llega o pasa de 2600. Sobran dos líneas.

  9. 9. Encuentra el caso que falla

    La lista de todos los que están por encima de Fabio, hasta la dirección. Hoy son Paula y Carmen. Alguien la escribió con uniones, un escalón en la primera mitad y dos en la segunda. ¿Con cuál de estos cambios deja fuera a alguien?

  10. 10. Escribe el código

    ¿Cuántos escalones separan a Nadia de la dirección? El punto de partida ya está, con su nivel en 0. Escribe la consulta que se repite y la de abajo, para que devuelva dos columnas en este orden, el nombre y el nivel de Nadia y de cada persona por encima de ella. Del nivel más alto al más bajo, con la dirección arriba. El paso hace de e, y empleados, de j.

Hacer esta lección

Se abre en el navegador. Esta lección es del plan completo; la primera unidad de cada curso es gratis.

Ver todas las lecciones →