DevPath · Aprende a programar ESPTEN

SQL avanzado: ventanas, vistas y CASE

Vistas y CTEs recursivas

Vistas: consultas con nombre

Una vista (VIEW) es una consulta guardada a la que pones nombre. No almacena datos: cada vez que la usas, se ejecuta su SELECT por debajo. Sirve para no repetir consultas complejas y para dar nombres claros al equipo.

CREATE VIEW productos_caros AS
SELECT nombre, categoria, precio
FROM productos
WHERE precio >= 200;

A partir de ahí, la usas como si fuera una tabla:

SELECT * FROM productos_caros ORDER BY precio DESC;
SELECT categoria, COUNT(*) FROM productos_caros GROUP BY categoria;

Una vista siempre refleja los datos actuales de las tablas base: si cambian los productos, la vista los muestra al instante (no hay copia que actualizar).

CTEs: el WITH

Una CTE (Common Table Expression) es una consulta temporal con nombre que solo vive durante la consulta en la que se declara, con WITH:

WITH caros AS (
  SELECT * FROM productos WHERE precio >= 200
)
SELECT categoria, AVG(precio) FROM caros GROUP BY categoria;

Frente a una vista, la CTE es local (no queda guardada) y hace la consulta más legible al separarla en pasos.

CTEs recursivas (intro)

Con WITH RECURSIVE una CTE puede referirse a sí misma, ideal para generar series o recorrer jerarquías. Tiene dos partes unidas por UNION ALL:

WITH RECURSIVE numeros(n) AS (
  SELECT 1                       -- caso base: el punto de partida
  UNION ALL
  SELECT n + 1 FROM numeros      -- paso recursivo: usa la fila anterior
  WHERE n < 5                    -- condición de parada (¡imprescindible!)
)
SELECT n FROM numeros;

Ejemplos

Crear una vista y consultarla

CREATE VIEW productos_caros AS
SELECT nombre, categoria, precio
FROM productos
WHERE precio >= 200;

SELECT * FROM productos_caros ORDER BY precio DESC;

Generar la serie 1..5 con una CTE recursiva

WITH RECURSIVE numeros(n) AS (
  SELECT 1
  UNION ALL
  SELECT n + 1 FROM numeros WHERE n < 5
)
SELECT n FROM numeros ORDER BY n;
Pon esto en práctica

DevPath es un curso práctico: aquí lees la teoría; en la app la pones en práctica con ejercicios que se ejecutan de verdad, sin conexión.

Empezar gratis en la app →
← Ventanas avanzadas: LAG, LEAD, NTILE y marcosTriggers: automatizar reacciones →