Ejercicios Prácticos de SQL
Ejercicio 9: Actualización de Empleados por Departamento
CREATE PROCEDURE actualiza_empleados
AS
BEGIN
DECLARE @departamento_id INT;
DECLARE @contador INT;
-- Crear un cursor para recorrer la tabla departamentos
DECLARE departamento_cursor CURSOR FOR
SELECT id FROM departamentos;
OPEN departamento_cursor;
FETCH NEXT FROM departamento_cursor INTO @departamento_id;
WHILE @@FETCH_STATUS = 0
BEGIN
-- Contar el número de empleados asignados a cada departamento
SELECT @contador = COUNT(*)
FROM empleados
WHERE id_departamento = @departamento_id;
-- Actualizar el campo num_empleados en la tabla departamentos
UPDATE departamentos
SET num_empleados = @contador
WHERE id = @departamento_id;
FETCH NEXT FROM departamento_cursor INTO @departamento_id;
END
CLOSE departamento_cursor;
DEALLOCATE departamento_cursor;
END;
Ejercicio 1: Cálculo del Área de un Triángulo
DELIMITER //
CREATE PROCEDURE CalcularAreaTriangulo(IN base FLOAT, IN altura FLOAT, OUT area FLOAT)
BEGIN
SET area = (base * altura) / 2;
END //
DELIMITER ;
Ejercicio 10: Cálculo de la Nota Media de Estudiantes
DELIMITER //
CREATE PROCEDURE calcularNotaMedia()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE dni_var CHAR(9);
DECLARE nota_sum DECIMAL(10,2);
DECLARE nota_count INT;
DECLARE nota_media DECIMAL(4,2);
DECLARE cur CURSOR FOR SELECT dni FROM estudiantes;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
calculo: LOOP
FETCH cur INTO dni_var;
IF done THEN
LEAVE calculo;
END IF;
SET nota_sum = 0;
SET nota_count = 0;
INNER_LOOP: LOOP
SELECT SUM(nota), COUNT(*) INTO nota_sum, nota_count
FROM calificaciones
WHERE fk_estudiante = dni_var;
EXIT INNER_LOOP;
END LOOP;
IF nota_count > 0 THEN
SET nota_media = nota_sum / nota_count;
ELSE
SET nota_media = 0;
END IF;
UPDATE estudiantes
SET nota_media = nota_media
WHERE dni = dni_var;
END LOOP calculo;
CLOSE cur;
END//
DELIMITER ;
Ejercicio 5: Determinación del Estado de un Pedido
DELIMITER //
CREATE FUNCTION DeterminarEstadoPedido(pedido_id INT) RETURNS VARCHAR(50)
BEGIN
DECLARE cantidad_pedido INT;
DECLARE estado_pedido VARCHAR(50);
-- Obtener la cantidad de productos solicitados en el pedido
SELECT cantidad INTO cantidad_pedido FROM pedidos WHERE id = pedido_id;
-- Determinar el estado del pedido según la cantidad
IF cantidad_pedido > 100 THEN
SET estado_pedido = 'Grande';
ELSEIF cantidad_pedido BETWEEN 51 AND 100 THEN
SET estado_pedido = 'Mediano';
ELSE
SET estado_pedido = 'Pequeño';
END IF;
-- Devolver el resultado
RETURN estado_pedido;
END //
DELIMITER ;
Ejercicio 7: Cálculo de Partidos Jugados por Jugador
DELIMITER //
CREATE PROCEDURE CalcularPartidosJugados()
BEGIN
DECLARE jugador_id INT;
DECLARE contador_partidos INT;
DECLARE done INT DEFAULT FALSE;
-- Cursor para recorrer la tabla de jugadores
DECLARE cur CURSOR FOR SELECT id FROM jugadores;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO jugador_id;
IF done THEN
LEAVE read_loop;
END IF;
-- Contar el número de partidos jugados por el jugador
SELECT COUNT(*) INTO contador_partidos FROM partidos_jugados WHERE fk_jugador = jugador_id;
-- Actualizar el campo num_partidos del jugador
UPDATE jugadores SET num_partidos = contador_partidos WHERE id = jugador_id;
END LOOP;
CLOSE cur;
END //
DELIMITER ;