Saltar a contenido

SA2 · Ejercicios de CTE recursivas

Los ejercicios SA2.1 a SA2.4 usan la tabla empleados de la página A2.1 y el SA2.6, la tabla vuelos de la A2.2: créalas primero con sus scripts. El SA2.5 no necesita ninguna tabla. Escribe tú toda la solución.

Ejercicio SA2.1

El equipo de Marta. Con la tabla empleados: nombre y puesto de todas las personas que dependen de Marta (id = 3), directa o indirectamente, sin incluir a Marta. Ordena por nombre.

Para crear la tabla:

CREATE TABLE empleados (
  id      INTEGER PRIMARY KEY,
  nombre  TEXT    NOT NULL,
  puesto  TEXT    NOT NULL,
  salario INTEGER NOT NULL,
  id_jefe INTEGER REFERENCES empleados(id)   -- NULL en quien no tiene jefe
);
INSERT INTO empleados VALUES
  (1, 'Carmen', 'Directora',          5000, NULL),
  (2, 'Luis',   'Jefe de tecnología', 3800, 1),
  (3, 'Marta',  'Jefa de ventas',     3600, 1),
  (4, 'Pablo',  'Desarrollador',      2800, 2),
  (5, 'Sara',   'Desarrolladora',     2900, 2),
  (6, 'Iván',   'Comercial',          2300, 3),
  (7, 'Elena',  'Comercial',          2400, 3),
  (8, 'Raúl',   'Becario',            1200, 4),
  (9, 'Noa',    'Becaria',            1200, 6);

Resultado esperado:

nombre puesto
Elena Comercial
Iván Comercial
Noa Becaria

3 filas

Solución modelo (bloqueada)

🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:

CREATE TABLE empleados (
  id      INTEGER PRIMARY KEY,
  nombre  TEXT    NOT NULL,
  puesto  TEXT    NOT NULL,
  salario INTEGER NOT NULL,
-- ... (resto de la solución bloqueado)

Ejercicio SA2.2

La cadena de mando de Noa. Con la tabla empleados: los jefes de Noa, de su jefe directo hacia arriba hasta la directora. Muestra nivel (1 para su jefe directo, 2 para el jefe de su jefe...) y nombre. Ordena por nivel.

Resultado esperado:

nivel nombre
1 Iván
2 Marta
3 Carmen

3 filas

Solución modelo (bloqueada)

🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:

CREATE TABLE empleados (
  id      INTEGER PRIMARY KEY,
  nombre  TEXT    NOT NULL,
  puesto  TEXT    NOT NULL,
  salario INTEGER NOT NULL,
-- ... (resto de la solución bloqueado)

Ejercicio SA2.3

El nivel de cada empleado. Con la tabla empleados: nombre y nivel de cada empleado (0 para quien no tiene jefe, 1 para sus subordinados directos...). Ordena por nivel y, dentro del mismo nivel, por nombre.

Resultado esperado:

nombre nivel
Carmen 0
Luis 1
Marta 1
Elena 2
Iván 2
Pablo 2
Sara 2
Noa 3
Raúl 3

9 filas

Solución modelo (bloqueada)

🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:

CREATE TABLE empleados (
  id      INTEGER PRIMARY KEY,
  nombre  TEXT    NOT NULL,
  puesto  TEXT    NOT NULL,
  salario INTEGER NOT NULL,
-- ... (resto de la solución bloqueado)

Ejercicio SA2.4

El coste del equipo de Luis. Con la tabla empleados: la suma de los salarios de Luis (id = 2) y de todas las personas que dependen de él, directa o indirectamente. Muestra una sola columna llamada coste_equipo.

Resultado esperado:

coste_equipo
10700

1 fila

Solución modelo (bloqueada)

🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:

CREATE TABLE empleados (
  id      INTEGER PRIMARY KEY,
  nombre  TEXT    NOT NULL,
  puesto  TEXT    NOT NULL,
  salario INTEGER NOT NULL,
-- ... (resto de la solución bloqueado)

Ejercicio SA2.5

Un calendario de cinco días. Genera los días del 3 al 7 de marzo de 2025 (dia, en formato AAAA-MM-DD) y, junto a cada uno, dia_semana en texto: lunes, martes, miércoles, jueves o viernes. Usa una CTE recursiva y la función strftime('%w', fecha), que da 0 para el domingo, 1 para el lunes, etc.

Resultado esperado:

dia dia_semana
2025-03-03 lunes
2025-03-04 martes
2025-03-05 miércoles
2025-03-06 jueves
2025-03-07 viernes

5 filas

Solución modelo (bloqueada)

🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:

WITH RECURSIVE dias(dia) AS (
  SELECT '2025-03-03'
  UNION ALL
  SELECT date(dia, '+1 day') FROM dias WHERE dia < '2025-03-07'
)
-- ... (resto de la solución bloqueado)

Ejercicio SA2.6

Ciudades alcanzables desde Sevilla. Con la tabla vuelos: todas las ciudades a las que se puede llegar desde Sevilla con uno o más vuelos. Usa UNION para que la recursión termine aunque haya ciclos. Ordena por ciudad.

Para crear la tabla:

CREATE TABLE vuelos (
  origen  TEXT NOT NULL,
  destino TEXT NOT NULL
);
INSERT INTO vuelos VALUES
  ('Cádiz', 'Sevilla'), ('Sevilla', 'Madrid'), ('Sevilla', 'Málaga'),
  ('Málaga', 'Madrid'), ('Madrid', 'Barcelona'), ('Barcelona', 'Cádiz');

Resultado esperado:

ciudad
Barcelona
Cádiz
Madrid
Málaga
Sevilla

5 filas

Solución modelo (bloqueada)

🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:

CREATE TABLE vuelos (
  origen  TEXT NOT NULL,
  destino TEXT NOT NULL
);
INSERT INTO vuelos VALUES
-- ... (resto de la solución bloqueado)