El documento presenta 9 ejercicios de SQL que manipulan diferentes tablas de una base de datos de recursos humanos. Los ejercicios incluyen consultas para resumir datos por departamento, país y región; extraer muestras aleatorias y por sueldo más alto de empleados; crear una tabla con trabajadores menores de 25 años aplicando restricciones; y agregar campos y actualizar información en las tablas.
1. Resolución - Ejercicios N°3 – SQL Básico
Utilizando la base de datos RRHH:
1. Muestre la cantidad de clientes y promedio de Salario agrupado por el Nombre del
departamento y por la descripción del puesto.
SELECT NOMBRE_DPTO,NOMBRE_CARGO,COUNT(ID_EMPLEADO) AS CANT_EMPL,
AVG(SUELDO)AS PROM_SUELDO
FROM CL_EMPLEADOS A
INNER JOIN CL_DEPARTAMENTOS B ON A.ID_DPTO=B.ID_DPTO
INNER JOIN CL_CARGOS C ON A.ID_CARGOS=C.ID_CARGOS
GROUP BY NOMBRE_DPTO,NOMBRE_CARGO
2. Ahora muestre las mismas variables agrupadas por nombre de Región y de País.
SELECT NOMBRE_REGION,NOMBRE_PAIS,COUNT(ID_EMPLEADO) AS
CANT_EMPL, AVG(SUELDO)AS PROM_SUELDO
FROM CL_EMPLEADOS A
INNER JOIN CL_DEPARTAMENTOS B ON A.ID_DPTO=B.ID_DPTO
INNER JOIN CL_LOCALIDAD C ON B.ID_LOCALIDAD=C.ID_LOCALIDAD
INNER JOIN CL_PAISES D ON C.ID_PAIS = D.ID_PAIS
INNER JOIN CL_REGIONES E ON D.ID_REGION = E.ID_REGION
GROUP BY NOMBRE_REGION,NOMBRE_PAIS
3. Se quiere realizar una encuesta de satisfacción y se desea tomar 20 empleados al azar para
realizarla. Realice el código para la extracción de esta muestra. Que el detalle incluya nombres
y apellidos, correo electrónico y teléfono, además que se encuentre ordenada por apellidos y
por área funcional.
SELECT TOP 20*
INTO TABLA_EJERC3
FROM CL_EMPLEADOS
GO
SELECT NOMBRE_DPTO, APELLIDOS, NOMBRES, EMAIL, TELEFONO
FROM TABLA_EJERC3 A
INNER JOIN CL_DEPARTAMENTOS D ON A.ID_DPTO = D.ID_DPTO
ORDER BY APELLIDOS ASC, NOMBRE_DPTO ASC
4. Realice la extracción de la muestra para la encuesta, pero ahora tomando los 2 empleados que
más ganan por área funcional.
SELECT *
FROM
(SELECT NOMBRE_DPTO,SUELDO, APELLIDOS, NOMBRES,
ROW_NUMBER()OVER (PARTITION BY NOMBRE_DPTO ORDER BY SUELDO DESC)
AS POSICION
FROM CL_EMPLEADOS E
INNER JOIN CL_DEPARTAMENTOS D ON E.ID_DPTO=D.ID_DPTO) AS TOP2
WHERE TOP2.POSICION <=2
5. En base a la tabla de empleados, crear una tabla que contenga a los trabajadores que tengan
25 años o menos. Adicione una restricción en la variable ID_EMPLEADO como PRIMARY KEY
SELECT *
2. INTO MENORES_25_COPIA
FROM CL_EMPLEADOS
WHERE EDAD <= 25
GO
ALTER TABLE MENORES_25_COPIA
ALTER COLUMN ID_EMPLEADO VARCHAR(50) NOT NULL
GO
ALTER TABLE MENORES_25_COPIA
ADD CONSTRAINT RESTR_ID_EMPL
PRIMARY KEY (ID_EMPLEADO)
GO
6. Adicione a la tabla del punto anterior la variable EDAD (que sólo admita valores entre 10 y 110
años) y la variable ECIVIL (que sólo admita los valores C (casado), S (soltero) y O (otro)
ALTER TABLE MENORES_25_COPIA
ADD ECIVIL VARCHAR(50),
CONSTRAINT ECIVIL CHECK (ECIVIL='C' OR ECIVIL = 'S' OR ECIVIL =
'O'),
CONSTRAINT EDAD CHECK (EDAD>=10 and EDAD<=110)
GO
7. Finalmente agregarle la restricción a la fecha de ingreso para que tenga como valor por defecto
(DEFAULT) la fecha actual del sistema.
ALTER TABLE MENORES_25_COPIA
ADD CONSTRAINT RESTR_FECHA
DEFAULT GETDATE() FOR FECHA_INGRESO
8. Invente un empleado nuevo el ingréselo, mostrando que están funcionando correctamente las
restricciones de la parte 5 a la 7, para ello pruebe inserciones que no cumplan con los
supuestos y muestre la salida resultante de la falla de la inserción. Finalmente muestre una
inserción satisfactoria (no coloque fecha de ingreso del empleado).
----INSERCIÓN NO SATISFACTORIA (ID_EMPLEADO)---
INSERT INTO MENORES_25_COPIA
VALUES (NULL, 'STEFANY', 'SALAZAR',
'STE.SAL@EMPRESA.COM.PE','6890789654',
DEFAULT,'MK_REP','3000','0.2','103','20','20','STEFANY
SALAZAR','2800','S')
---INSERCIÓN NO SATISFACTORIA (EDAD)---
INSERT INTO MENORES_25_ORIG
VALUES ('203', 'STEFANY', 'SALAZAR',
'STE.SAL@EMPRESA.COM.PE','6890789654',
DEFAULT,'MK_REP','3000','0.2','103','20',120,'STEFANY
SALAZAR','2800','S')
----INSERCIÓN NO SATISFACTORIA (ECIVIL)---
INSERT INTO MENORES_25_COPIA
VALUES('203','STEFANY', 'SALAZAR',
'STE.SAL@EMPRESA.COM.PE','6890789654',
DEFAULT,'MK_REP','3000','0.2','103','20',20,'STEFANY
SALAZAR','2800','D')
---INSERCIÓN SATISFACTORIA - CUMPLE CON TODAS LAS RESTRICCIONES--
3. INSERT INTO MENORES_25_COPIA
VALUES ('203', 'STEFANY', 'SALAZAR',
'STE.SAL@EMPRESA.COM.PE','6.890.789.654',DEFAULT
,'MK_REP','3000','0.2','103','20','20','STEFANY
SALAZAR','2880','S')
9. A la tabla anterior, adicionarle el nombre del departamento y el nombre del cargo del
empleado. Para ello crear los campos y luego actualizarlos cruzando la tabla empleados con la
tabla correspondiente.
ALTER TABLE MENORES_25_COPIA
ADD NOMBRE_DPTO varchar(50), NOMBRE_CARGO varchar(50)
GO
UPDATE MENORES_25_COPIA
SET MENORES_25_COPIA.NOMBRE_CARGO=dbo.CL_CARGOS.NOMBRE_CARGO,
MENORES_25_COPIA.NOMBRE_DPTO=dbo.CL_DEPARTAMENTOS.NOMBRE_DPTO
FROM MENORES_25_COPIA JOIN CL_DEPARTAMENTOS ON
MENORES_25_COPIA.ID_DPTO=CL_DEPARTAMENTOS.ID_DPTO
JOIN CL_CARGOS ON MENORES_25_COPIA.ID_CARGOS=CL_CARGOS.ID_CARGOS
GO
SELECT*
FROM MENORES_25_COPIA
ORDER BY ID_EMPLEADO