Gestión de Nómina - Procedimientos y Consultas SQL

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;