CREATE TABLE Empleados (CodEmpleado INT(11) PRIMARY KEY AUTO_INCREMENT not null, Nombre VARCHAR(50) not null, CodDeduccion INT(11) not null, CodBeneficio INT(11) not null, CodDepartamento INT(11) not null, Apellido VARCHAR(50) not null, FechaNacimiento DATE not null, Direccion VARCHAR(100) not null, Telefono VARCHAR(15) not null, CorreoElectronico VARCHAR(100) not null, FechaContratacion DATE not null);
CREATE TABLE Deducciones (CodDeduccion INT PRIMARY KEY AUTO_INCREMENT not null, TipoDeduccion VARCHAR(50) not null, MontoDeduccion DECIMAL(10, 2) not null, FechaAplicacion DATE not null);
CREATE TABLE Beneficios (CodBeneficio INT(11) PRIMARY KEY AUTO_INCREMENT not null, TipoBeneficio VARCHAR(50) not null, MontoBeneficio DECIMAL(10, 2) not null);
CREATE TABLE Departamentos (CodDepartamento INT(11) PRIMARY KEY AUTO_INCREMENT not null, CodCargo INT(11), NombreDepartamento VARCHAR(100) not null);
CREATE TABLE Cargos (CodCargo INT(11) PRIMARY KEY AUTO_INCREMENT not null, CodDepartamento INT(11), NombreCargo VARCHAR(100) not null);
INSERT INTO Departamentos (NombreDepartamento) VALUES ("Desarrollo de Software"), ("Ingeniería de Hardware"), ("Operaciones de TI"), ("Departamento de Calidad y Pruebas"), ("Departamento de Ventas y Marketing"), ("Departamento de Investigación y Desarrollo (I+D)"), ("Departamento de Recursos Humanos"), ("Departamento Legal y de Cumplimiento"), ("Departamento de Finanzas y Contabilidad"), ("Departamento de Servicio al Cliente");
INSERT INTO Cargos (NombreCargo) VALUES ("Ingeniero de Software"), ("Ingeniero de Hardware"), ("Administrador de Sistemas"), ("Especialista en Pruebas de Software"), ("Gerente de Ventas"), ("Especialista en Marketing Digital"), ("Investigador de I+D"), ("Gerente de Recursos Humanos"), ("Abogado Corporativo"), ("Analista Financiero");
INSERT INTO Deducciones (TipoDeduccion, MontoDeduccion, FechaAplicacion) VALUES ("Seguro de salud", 100.00, "2024-05-01"), ("Seguro de vida", 50.00, "2024-05-01"), ("Fondo de pensiones", 150.00, "2024-05-01"), ("Préstamo de empleado", 75.00, "2024-05-01"), ("Seguro de automóvil", 80.00, "2024-05-01"), ("Contribución de jubilación", 200.00, "2024-05-01"), ("Impuesto sobre la renta", 250.00, "2024-05-01"), ("Préstamo estudiantil", 60.00, "2024-05-01"), ("Cuota sindical", 30.00, "2024-05-01"), ("Seguro de discapacidad", 90.00, "2024-05-01");
INSERT INTO Beneficios (CodBeneficio, TipoBeneficio, MontoBeneficio) VALUES (null, "Beneficios médicos", 10000), (null, "Beneficios de jubilación", 12000), (null, "Tiempo libre remunerado", 350000), (null, "Beneficios de bienestar", 10000), (null, "Seguro de vida y discapacidad", 5000), (null, "Bonificaciones y incentivos", 23000), (null, "Desarrollo profesional", 10000), (null, "Beneficios adicionales", 11000), (null, "Cultura y ambiente de trabajo", 20000);
INSERT INTO Empleados (CodEmpleado, Nombre, Apellido, FechaNacimiento, Direccion, Telefono, CorreoElectronico, FechaContratacion, CodDeduccion, CodBeneficio, CodDepartamento) VALUES (NULL, "Juan", "Martinez", "1985-03-15", "123 Calle Principal", "123-456-7890", "juan@example.com", "2020-01-15", 1, 1, 11), (NULL, "Maria", "Gomez", "1990-07-25", "456 Avenida Central", "456-789-0123", "maria@example.com", "2018-05-10", 2, 2, 12), (NULL, "Carlos", "Lopez", "1988-11-10", "789 Calle Secundaria", "789-012-3456", "carlos@example.com", "2019-08-20", 3, 3, 13);
ALTER TABLE Empleados ADD CONSTRAINT FK_Empleados_Deducciones FOREIGN KEY (CodDeduccion) REFERENCES Deducciones(CodDeduccion);
ALTER TABLE Empleados ADD CONSTRAINT FK_Empleados_Beneficios FOREIGN KEY (CodBeneficio) REFERENCES Beneficios(CodBeneficio);
ALTER TABLE Empleados ADD CONSTRAINT FK_Empleados_Departamentos FOREIGN KEY (CodDepartamento) REFERENCES Departamentos(CodDepartamento);
ALTER TABLE Departamentos ADD CONSTRAINT FK_Departamentos_Cargos FOREIGN KEY (CodCargo) REFERENCES Cargos(CodCargo);
ALTER TABLE Cargos ADD CONSTRAINT FK_Cargos_Departamentos FOREIGN KEY (CodDepartamento) REFERENCES Departamentos(CodDepartamento);
SELECT CodDepartamento FROM Departamentos;
SELECT * FROM Empleados;
SELECT TipoDeduccion, MontoDeduccion FROM Deducciones;
SELECT TipoBeneficio, MontoBeneficio FROM Beneficios;
SELECT d.NombreDepartamento, c.NombreCargo FROM Departamentos d LEFT JOIN Cargos c ON d.CodDepartamento = c.CodDepartamento;
SELECT e.Nombre, e.Apellido, d.NombreDepartamento FROM Empleados e INNER JOIN Departamentos d ON e.CodDepartamento = d.CodDepartamento;