Procedimientos Almacenados
-- Procedimiento para seleccionar todos los departamentos
CREATE PROCEDURE GetAllDepartamentos()
BEGIN
SELECT * FROM Departamentos;
END;
-- Procedimiento para seleccionar un departamento específico por código
CREATE PROCEDURE GetDepartamentoById(IN id INT)
BEGIN
SELECT * FROM Departamentos WHERE CodDepartamento = id;
END;
-- Procedimiento para seleccionar todas las deducciones
CREATE PROCEDURE GetAllDeducciones()
BEGIN
SELECT * FROM Deducciones;
END;
-- Procedimiento para seleccionar una deducción específica por código
CREATE PROCEDURE GetDeduccionById(IN id INT)
BEGIN
SELECT * FROM Deducciones WHERE CodDeduccion = id;
END;
-- Procedimiento para seleccionar todos los cargos
CREATE PROCEDURE GetAllCargos()
BEGIN
SELECT * FROM Cargos;
END;
-- Procedimiento para seleccionar un cargo específico por código
CREATE PROCEDURE GetCargoById(IN id INT)
BEGIN
SELECT * FROM Cargos WHERE CodCargo = id;
END;
-- Procedimiento para seleccionar todos los empleados
CREATE PROCEDURE GetAllEmpleados()
BEGIN
SELECT * FROM Empleados;
END;
-- Procedimiento para seleccionar un empleado específico por código
CREATE PROCEDURE GetEmpleadoById(IN id INT)
BEGIN
SELECT * FROM Empleados WHERE CodEmpleado = id;
END;
-- Procedimiento para seleccionar todas las nóminas
CREATE PROCEDURE GetAllNominas()
BEGIN
SELECT * FROM Nominas;
END;
-- Procedimiento para seleccionar una nómina específica por código
CREATE PROCEDURE GetNominaById(IN id INT)
BEGIN
SELECT * FROM Nominas WHERE CodNomina = id;
END;
-- Procedimiento para seleccionar todos los beneficios
CREATE PROCEDURE GetAllBeneficios()
BEGIN
SELECT * FROM Beneficios;
END;
-- Procedimiento para seleccionar un beneficio específico por código
CREATE PROCEDURE GetBeneficioById(IN id INT)
BEGIN
SELECT * FROM Beneficios WHERE CodBeneficio = id;
END;
-- Procedimiento para seleccionar todas las deducciones de una nómina específica
CREATE PROCEDURE GetDeduccionesByNomina(IN id INT)
BEGIN
SELECT * FROM DeduccionNomina WHERE CodNomina = id;
END;
-- Procedimiento para seleccionar todos los beneficios de una nómina específica
CREATE PROCEDURE GetBeneficiosByNomina(IN id INT)
BEGIN
SELECT * FROM BeneficioNomina WHERE CodNomina = id;
END;
-- Procedimiento para obtener el total de empleados por departamento
CREATE PROCEDURE GetTotalEmpleadosByDepartamento(IN id INT)
BEGIN
SELECT d.nombre AS Departamento, COUNT(e.CodEmpleado) AS TotalEmpleados
FROM Departamentos d
LEFT JOIN Cargos c ON d.CodDepartamento = c.CodDepartamento
LEFT JOIN EmpleadoCargo ec ON c.CodCargo = ec.CodCargo
LEFT JOIN Empleados e ON ec.CodEmpleado = e.CodEmpleado
WHERE d.CodDepartamento = id
GROUP BY d.nombre;
END;
-- Procedimiento para obtener la nómina de un empleado específico
CREATE PROCEDURE GetNominaByEmpleado(IN id INT)
BEGIN
SELECT n.*
FROM Nominas n
JOIN DeduccionNomina dn ON n.CodNomina = dn.CodNomina
JOIN BeneficioNomina bn ON n.CodNomina = bn.CodNomina
WHERE dn.CodEmpleado = id OR bn.CodEmpleado = id;
END;
-- Procedimiento para obtener beneficios y deducciones totales de una nómina específica
CREATE PROCEDURE GetTotalesNomina(IN id INT)
BEGIN
SELECT
(SELECT SUM(monto) FROM DeduccionNomina WHERE CodNomina = id) AS TotalDeducciones,
(SELECT SUM(monto) FROM BeneficioNomina WHERE CodNomina = id) AS TotalBeneficios;
END;
-- Procedimiento para obtener empleados con más beneficios asignados
CREATE PROCEDURE GetEmpleadosConMasBeneficios()
BEGIN
SELECT e.nombre, e.apellido, COUNT(bn.CodBeneficio) AS CantidadBeneficios
FROM Empleados e
JOIN BeneficioNomina bn ON e.CodEmpleado = bn.CodEmpleado
GROUP BY e.CodEmpleado
ORDER BY CantidadBeneficios DESC
LIMIT 10;
END;
-- Procedimiento para obtener las deducciones más comunes
CREATE PROCEDURE GetDeduccionesMasComunes()
BEGIN
SELECT d.nombre, COUNT(dn.CodDeduccion) AS Cantidad
FROM Deducciones d
JOIN DeduccionNomina dn ON d.CodDeduccion = dn.CodDeduccion
GROUP BY d.CodDeduccion
ORDER BY Cantidad DESC
LIMIT 10;
END;
Procedimientos con SELECT
-- Procedimiento para seleccionar todos los departamentos
CREATE PROCEDURE GetAllDepartamentos()
BEGIN
SELECT * FROM Departamentos;
END;
-- Procedimiento para seleccionar un departamento específico por código
CREATE PROCEDURE GetDepartamentoById(IN id INT)
BEGIN
SELECT * FROM Departamentos WHERE CodDepartamento = id;
END;
-- Procedimiento para seleccionar todas las deducciones
CREATE PROCEDURE GetAllDeducciones()
BEGIN
SELECT * FROM Deducciones;
END;
-- Procedimiento para seleccionar una deducción específica por código
CREATE PROCEDURE GetDeduccionById(IN id INT)
BEGIN
SELECT * FROM Deducciones WHERE CodDeduccion = id;
END;
-- Procedimiento para seleccionar todos los cargos
CREATE PROCEDURE GetAllCargos()
BEGIN
SELECT * FROM Cargos;
END;
-- Procedimiento para seleccionar un cargo específico por código
CREATE PROCEDURE GetCargoById(IN id INT)
BEGIN
SELECT * FROM Cargos WHERE CodCargo = id;
END;
-- Procedimiento para seleccionar todos los empleados
CREATE PROCEDURE GetAllEmpleados()
BEGIN
SELECT * FROM Empleados;
END;
-- Procedimiento para seleccionar un empleado específico por código
CREATE PROCEDURE GetEmpleadoById(IN id INT)
BEGIN
SELECT * FROM Empleados WHERE CodEmpleado = id;
END;
-- Procedimiento para seleccionar todas las nóminas
CREATE PROCEDURE GetAllNominas()
BEGIN
SELECT * FROM Nominas;
END;
-- Procedimiento para seleccionar una nómina específica por código
CREATE PROCEDURE GetNominaById(IN id INT)
BEGIN
SELECT * FROM Nominas WHERE CodNomina = id;
END;
-- Procedimiento para seleccionar todos los beneficios
CREATE PROCEDURE GetAllBeneficios()
BEGIN
SELECT * FROM Beneficios;
END;
-- Procedimiento para seleccionar un beneficio específico por código
CREATE PROCEDURE GetBeneficioById(IN id INT)
BEGIN
SELECT * FROM Beneficios WHERE CodBeneficio = id;
END;
-- Procedimiento para seleccionar todas las deducciones de una nómina específica
CREATE PROCEDURE GetDeduccionesByNomina(IN id INT)
BEGIN
SELECT * FROM DeduccionNomina WHERE CodNomina = id;
END;
-- Procedimiento para seleccionar todos los beneficios de una nómina específica
CREATE PROCEDURE GetBeneficiosByNomina(IN id INT)
BEGIN
SELECT * FROM BeneficioNomina WHERE CodNomina = id;
END;
-- Procedimiento para obtener el total de empleados por departamento
CREATE PROCEDURE GetTotalEmpleadosByDepartamento(IN id INT)
BEGIN
SELECT d.nombre AS Departamento, COUNT(e.CodEmpleado) AS TotalEmpleados
FROM Departamentos d
LEFT JOIN Cargos c ON d.CodDepartamento = c.CodDepartamento
LEFT JOIN EmpleadoCargo ec ON c.CodCargo = ec.CodCargo
LEFT JOIN Empleados e ON ec.CodEmpleado = e.CodEmpleado
WHERE d.CodDepartamento = id
GROUP BY d.nombre;
END;
-- Procedimiento para obtener la nómina de un empleado específico
CREATE PROCEDURE GetNominaByEmpleado(IN id INT)
BEGIN
SELECT n.*
FROM Nominas n
JOIN DeduccionNomina dn ON n.CodNomina = dn.CodNomina
JOIN BeneficioNomina bn ON n.CodNomina = bn.CodNomina
WHERE dn.CodEmpleado = id OR bn.CodEmpleado = id;
END;
-- Procedimiento para obtener beneficios y deducciones totales de una nómina específica
CREATE PROCEDURE GetTotalesNomina(IN id INT)
BEGIN
SELECT
(SELECT SUM(monto) FROM DeduccionNomina WHERE CodNomina = id) AS TotalDeducciones,
(SELECT SUM(monto) FROM BeneficioNomina WHERE CodNomina = id) AS TotalBeneficios;
END;
-- Procedimiento para obtener empleados con más beneficios asignados
CREATE PROCEDURE GetEmpleadosConMasBeneficios()
BEGIN
SELECT e.nombre, e.apellido, COUNT(bn.CodBeneficio) AS CantidadBeneficios
FROM Empleados e
JOIN BeneficioNomina bn ON e.CodEmpleado = bn.CodEmpleado
GROUP BY e.CodEmpleado
ORDER BY CantidadBeneficios DESC
LIMIT 10;
END;
-- Procedimiento para obtener las deducciones más comunes
CREATE PROCEDURE GetDeduccionesMasComunes()
BEGIN
SELECT d.nombre, COUNT(dn.CodDeduccion) AS Cantidad
FROM Deducciones d
JOIN DeduccionNomina dn ON d.CodDeduccion = dn.CodDeduccion
GROUP BY d.CodDeduccion
ORDER BY Cantidad DESC
LIMIT 10;
END;
SELECTs Separados
-- Seleccionar todos los departamentos
SELECT * FROM Departamentos;
-- Seleccionar un departamento específico por su código
SELECT * FROM Departamentos
WHERE CodDepartamento = 1; -- Reemplaza 1 con el código deseado
-- Seleccionar todas las deducciones
SELECT * FROM Deducciones;
-- Seleccionar una deducción específica por su código
SELECT * FROM Deducciones
WHERE CodDeduccion = 1; -- Reemplaza 1 con el código deseado
-- Seleccionar todos los cargos
SELECT * FROM Cargos;
-- Seleccionar un cargo específico por su código
SELECT * FROM Cargos
WHERE CodCargo = 1; -- Reemplaza 1 con el código deseado
-- Seleccionar todos los empleados
SELECT * FROM Empleados;
-- Seleccionar un empleado específico por su código
SELECT * FROM Empleados
WHERE CodEmpleado = 1; -- Reemplaza 1 con el código deseado
-- Seleccionar todas las nóminas
SELECT * FROM Nominas;
-- Seleccionar una nómina específica por su código
SELECT * FROM Nominas
WHERE CodNomina = 1; -- Reemplaza 1 con el código deseado
-- Seleccionar todos los beneficios
SELECT * FROM Beneficios;
-- Seleccionar un beneficio específico por su código
SELECT * FROM Beneficios
WHERE CodBeneficio = 1; -- Reemplaza 1 con el código deseado
-- Seleccionar todas las deducciones de una nómina específica
SELECT * FROM DeduccionNomina
WHERE CodNomina = 1; -- Reemplaza 1 con el código deseado
-- Seleccionar todos los beneficios de una nómina específica
SELECT * FROM BeneficioNomina
WHERE CodNomina = 1; -- Reemplaza 1 con el código deseado
-- Obtener el total de empleados por departamento
SELECT d.nombre AS Departamento, COUNT(e.CodEmpleado) AS TotalEmpleados
FROM Departamentos d
LEFT JOIN Cargos c ON d.CodDepartamento = c.CodDepartamento
LEFT JOIN EmpleadoCargo ec ON c.CodCargo = ec.CodCargo
LEFT JOIN Empleados e ON ec.CodEmpleado = e.CodEmpleado
WHERE d.CodDepartamento = 1 -- Reemplaza 1 con el código deseado
GROUP BY d.nombre;
-- Obtener la nómina de un empleado específico
SELECT n.*
FROM Nominas n
JOIN DeduccionNomina dn ON n.CodNomina = dn.CodNomina
JOIN BeneficioNomina bn ON n.CodNomina = bn.CodNomina
WHERE dn.CodEmpleado = 1 OR bn.CodEmpleado = 1; -- Reemplaza 1 con el código deseado
-- Obtener beneficios y deducciones totales de una nómina específica
SELECT
(SELECT SUM(monto) FROM DeduccionNomina WHERE CodNomina = 1) AS TotalDeducciones,
(SELECT SUM(monto) FROM BeneficioNomina WHERE CodNomina = 1) AS TotalBeneficios;
-- Reemplaza 1 con el código deseado
-- Obtener empleados con más beneficios asignados
SELECT e.nombre, e.apellido, COUNT(bn.CodBeneficio) AS CantidadBeneficios
FROM Empleados e
JOIN BeneficioNomina bn ON e.CodEmpleado = bn.CodEmpleado
GROUP BY e.CodEmpleado
ORDER BY CantidadBeneficios DESC
LIMIT 10;
-- Obtener las deducciones más comunes
SELECT d.nombre, COUNT(dn.CodDeduccion) AS Cantidad
FROM Deducciones d
JOIN DeduccionNomina dn ON d.CodDeduccion = dn.CodDeduccion
GROUP BY d.CodDeduccion
ORDER BY Cantidad DESC
LIMIT 10;