0% encontró este documento útil (1 voto)
1K vistas32 páginas

Ejercicios SQL

El documento contiene instrucciones SQL para crear y poblar bases de datos y tablas relacionadas con departamentos y empleados de una empresa. Se crean tablas para almacenar información de departamentos y empleados con sus respectivos campos. Luego se ingresan datos de ejemplo a las tablas. Finalmente, se incluyen 35 consultas SQL de ejemplo para extraer y manipular datos de las tablas.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (1 voto)
1K vistas32 páginas

Ejercicios SQL

El documento contiene instrucciones SQL para crear y poblar bases de datos y tablas relacionadas con departamentos y empleados de una empresa. Se crean tablas para almacenar información de departamentos y empleados con sus respectivos campos. Luego se ingresan datos de ejemplo a las tablas. Finalmente, se incluyen 35 consultas SQL de ejemplo para extraer y manipular datos de las tablas.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 32

Arturo Daniel Córdova Ortega

/* COAD - Creando la base datos

CREATE DATABASE ejercicioSQL

USE ejercicioSQL
CREATE TABLE departamento
(
codDepto VARCHAR (4),
nombreDpto VARCHAR(20) NOT NULL,
ciudad VARCHAR (15),
codDirector VARCHAR(12)
);

CREATE TABLE empleados


(
nDIEmp VARCHAR (12) NOT NULL,
nomEmp VARCHAR(30) NOT NULL,
sexEmp CHAR(1) NOT NULL CHECK (SexEmp IN('M','F')),
fecNac DATE NOT NULL,
fecIncorporacion DATE NOT NULL,
salEmp FLOAT NOT NULL,
comisionE FLOAT NOT NULL,
cargoE VARCHAR (15) NOT NULL,
jefeID VARCHAR (12) NOT NULL,
codDepto VARCHAR (4) NOT NULL,
);*/

/*COAD - Ingresando los datos a la tabla departamento

INSERT INTO departamento (CodDepto, nombreDpto, ciudad, codDirector)


VALUES
('1000','Gerencia','Cali','31.840.269'),
('1500','Produccion','Cali','16.211.383'),
('2000','Ventas','Cali','31.178.144'),
('300','Investigacion','Cali','16.759.060'),
('3500','Mercadeo','Cali','22.222.222'),
('2100','Ventas','Popayan','31.751.219'),
('2200','Ventas','Buga','768.782'),
('2300','Ventas','Cartago','737.689'),
('4000','Mantenimiento','Cali','333.333.333'),
('4100','Mantenimiento','Popayan','888.888'),
('4200','Mantenimiento','Buga','11.111.111'),
('4300','Mantenimiento','Cartago','444.444');*/

/*COAD - Ingresando datos de la tabla empleados


INSERT INTO empleados
(nDIEmp,nomEmp,sexEmp,fecNac,fecIncorporacion,salEmp,comisionE,cargoE,jefeID,codDepto)
VALUES
('31.840.269','Maria
Rojas','F','1959/01/15','1990/05/16',6250000,1500000,'Gerente','NULL','1000'),
('16.211.383','Luis Perez','M','1956/02/25','2000/01/01',5050000,0,'Director','31.840.269','1500'),
('31.178.144','Rosa Angulo','F','1957/03/15','1998/08/16',3250000,3500000,'Jefe
Ventas','31.840.269','2000'),
('16.759.060','Dario
Casas','M','1960/04/05','1992/11/01',4500000,500000,'Investigador','31.840.269','3000'),
('22.222.222','Carla Lopez','F','1974/05/11','2005/07/16',4500000,500000,'Jefe
Mercadeo','31.840.269','3500'),
('1.751.219','Melissa
Roa','F','1960/06/19','2001/03/16',2250000,2500000,'Vendedor','31.178.144','2100'),
('768.782','Joaquin
Rosas','M','1947/07/07','1990/05/17',2250000,2500000,'Vendedor','31.178.144','2200'),
('737.689','Mario
Llano','M','1945/08/30','1990/05/16',2250000,2500000,'Vendedor','31.178.144','2300'),
('333.333.333','Elisa Rojas','F','1979/09/28','2004/06/01',3000000,1000000,'Jefe
Mecanicos','31.178.144','4000'),
('888.888','Ivan
Duarte','M','1955/08/12','1998/05/16',1050000,200000,'Mecanico','333.333.333','4100'),
('11.111.111','Irene
Diaz','F','1979/09/28','2004/06/01',1050000,200000,'Mecanico','333.333.333','4200'),
('444.444','Abel
Gomez','M','1929/12/24','2000/10/01',1050000,200000,'Mecanico','333.333.333','4300'),
('1.130.222','Jose
Giraldo','M','1985/01/23','2000/11/01',1200000,400000,'Asesor','22.222.222','4100'),
('19.709.802','William
Daza','M','1982/10/09','1999/12/16',2250000,1000000,'Investigador','16.211.383','1500'),
('31.174.099','Diana
Solarte','F','1957/11/19','1990/05/16',1250000,500000,'Secretaria','31.840.269','1000'),
('1.130.777','Marcos
cortez','M','1986/06/23','2000/04/16',2250000,500000,'Mecanico','333.333.333','4000'),
('1.130.782','Antonio
Gil','M','1980/01/23','2010/04/26',850000,1500000,'Tecnico','16.211.383','1500'),
('333.333.334','Marisol
Pulido','F','1979/10/01','1990/05/16',3250000,1000000,'Investigador','16.759.060','3000'),
('333.333.335','Ana
Moreno','F','1992/01/05','2004/06/01',1200000,400000,'Secretaria','16.759.060','3000'),
('1.130.333','Pedro
Blanco','M','1987/10/28','2000/10/01',800000,3000000,'Vendedor','31.178.144','2000'),
('1.130.444','Jesus
Alfonso','M','1988/03/14','2000/10/01',800000,3500000,'Vendedor','31.178.144','2000'),
('333.333.336','Carolina
Rios','F','1992/02/15','2000/10/01',1250000,500000,'Secretaria','16.211.383','1500'),
('333.333.337','Edith
Muñoz','F','1992/03/31','2000/10/01',800000,3600000,'Vendedor','31.178.144','2100'),
('1.130.555','Julian
Mora','M','1989/07/03','2000/10/01',800000,3100000,'Vendedor','31.178.144','2200'),
('1.130.666','Manuel
Millan','M','1990/12/08','2004/06/01',800000,3700000,'Vendedor','31.178.144','2300');*/

/*COAD - 1. Obtener los datos completos de los empleado*/


SELECT * FROM empleados;

/*COAD - 2. Obtener los datos de los departamento*/


SELECT * FROM departamento;
/* Obtener los datos de los empleados con cargo 'Secretaria'.
select
*from empeado
where cargo='SECRETARIA';

4. Obtener el nombre y salario de los empleados.


select nomEmp, salEmp from empeado;
5. Obtener los datos de los empleados vendedores, ordenado por nombre.
select *from empleados
where cargo='vendedor'
order by nomEmp

6. Listar el nombre de los departamentos


select nombreDpto from departamento;

7. Listar el nombre de los departamentos, ordenado por nombre


select distinct nombreDpto from departamento order by nombreDpto;

8. Listar el nombre de los departamentos, ordenado por ciudad


select nombreDpto, ciudad from departamento
9. Listar el nombre de los departamentos, ordenado por ciudad, en orden
inverso
select nombreDpto, ciudad from departamento order by ciudad desc;

10. Obtener el nombre y cargo de todos los empleados, ordenado por salario
select nomEmp, cargo from empeado order by salEmp;
11. Obtener el nombre y cargo de todos los empleados, ordenado por cargo y
por salario
SELECT nomEmp, cargo, salEmp FROM empeado
ORDER BY cargo, salEmp;

12. Obtener el nombre y cargo de todos los empleados, en orden inverso por
cargo
SELECT nomEmp, cargo FROM empeado
ORDER BY cargo DESC;
13. Listar los salarios y comisiones de los empleados del departamento 2000
SELECT nomEmp, salEmp, comis FROM Empeado
WHERE nroDepto = '2000';

14. Listar los salarios y comisiones de los empleados del departamento 2000,
ordenado
por comisión
SELECT nomEmp, salEmp, comis FROM Empeado
WHERE nroDepto = '2000'
ORDER BY comis;

15. Listar todas las comisiones


SELECT comis FROM Empeado;

16. Listar las comisiones que sean diferentes, ordenada por valor
SELECT DISTINCT comis FROM Empeado
ORDER BY comis;

17. Listar los diferentes salarios


SELECT DISTINCT salEmp FROM Empeado
ORDER BY salEmp;

18. Obtener el valor total a pagar que resulta de sumar a los empleados del
departamento 3000 una bonificación de $500.000, en orden alfabético del
empleado
SELECT nomEmp, salEmp, 'Pago Total = $', salEmp+500000 FROM Empeado
WHERE nroDepto = '3000';
19. Obtener la lista de los empleados que ganan una comisión superior a su
sueldo.
SELECT nDIEmp, nomEmp, salEmp, comis FROM Empeado
WHERE comis > salEmp;

20. Listar los empleados cuya comisión es menor o igual que el 30% de su
sueldo.
SELECT nDIEmp, nomEmp, salEmp, comis FROM Empeado
WHERE comis <= salEmp*0.30;
21. Elabore un listado donde para cada fila, figure ‘Nombre’ y ‘Cargo’ antes
del valor
respectivo para cada empleado
SELECT 'Nombre: ', nomEmp, 'Cargo: ', cargo FROM Empeado;
22. Hallar el salario y la comisión de aquellos empleados cuyo número de
documento
de identidad es superior al '19.709.802'
SELECT nDIEmp, nomEmp, salEmp,comis FROM Empeado
WHERE nDIEmp > '19.709.802';

23. Listar los empleados cuyo salario es menor o igual que el 40% de su
comisión SELECT nomEmp, salEmp, comis FROM Empeado
WHERE salEmp <= comis*0.40;
24. Divida los empleados, generando un grupo cuyo nombre inicie por la letra
Jy
termine en la letra Z. Liste estos empleados y su cargo por orden alfabético.
SELECT Jz.nomEmp, Jz.cargo FROM (SELECT *FROM Empeado WHERE nomEmp > 'J' AND nomEmp <'z')JZ
ORDER BY nomEmp;

25. Listar el salario, la comisión, el salario total (salario + comisión),


documento de
identidad del empleado y nombre, de aquellos empleados que tienen
comisión superior
a $1.000.000, ordenar el informe por el número del documento de identidad
SELECT nDIEmp, nomEmp, salEmp, comis, (salEmp+comis) as total FROM Empeado
WHERE comis > 1000000
ORDER BY nDIEmp;
26. Obtener un listado similar al anterior, pero de aquellos empleados que
NO tienen
comisión SELECT nDIEmp, nomEmp, salEmp, comis, (salEmp+comis) as total FROM Empeado
WHERE comis = 0
ORDER BY nDIEmp;

27. Hallar el nombre de los empleados que tienen un salario superior a


$1.000.000, y
tienen como jefe al empleado con documento de identidad '31.840.269'
SELECT nomEmp FROM Empeado
WHERE salEmp > 1000000 AND jefeDI = '31.840.269';
28. Hallar el conjunto complementario del resultado del ejercicio anterior.
SELECT nomEmp FROM Empeado
WHERE salEmp <= 1000000 AND jefeDI = '31.840.269';

29. Hallar los empleados cuyo nombre no contiene la cadena “MA”


SELECT nomEmp FROM Empeado
WHERE nomEmp LIKE 'Ma%';
30. Obtener los nombres de los departamentos que no sean “Ventas” ni
“Investigación” NI ‘MANTENIMIENTO’, ordenados por ciudad.
SELECT nombreDpto, ciudad FROM Departamento
WHERE nombreDpto NOT IN ('VENTAS','INVESTIGACIÓN','MANTENIMIENTO')
ORDER BY ciudad;
31. Obtener el nombre y el departamento de los empleados con cargo
'Secretaria' o 'Vendedor', que no trabajan en el departamento de
“PRODUCCION”, cuyo salario es superior a $1.000.000, ordenados por fecha
de incorporación.
SELECT E.nomEmp, E. cargo, D.nombreDpto FROM Departamento D, empeado E
WHERE cargo NOT IN ('Secretaria','Vendedor') AND salEmp > 1000000 AND E.nroDepto = D.coddepto AND
E.nroDepto NOT IN
(SELECT F.coddepto FROM Departamento F WHERE F.nombredpto='PRODUCCIÓN');

32. Obtener información de los empleados cuyo nombre tiene exactamente


caracteres
SELECT nomEmp FROM Empeado
WHERE nomEmp like'___________'
33. Obtener información de los empleados cuyo nombre tiene al menos 11
caracteres
select nomEmp from EMPLEADO
WHERE nomEmp like '___________%';

34. Listar los datos de los empleados cuyo nombre inicia por la letra 'M', su
salario es mayor a $800.000 o reciben comisión y trabajan para el
departamento de 'VENTAS'
select nomEmp from EMPLEADO
WHERE nomEmp 800000 comis 0 like 'M%’ and (salEmp > 800000 or comis >0);

35. Obtener los nombres, salarios y comisiones de los empleados que reciben
un salario
situado entre la mitad de la comisión la propia comisión
SELECT nomEmp, salEmp, comis FROM Empeado
WHERE salEmp >= comis/2 AND
salEmp <= comis ;
36. Suponga que la empresa va a aplicar un reajuste salarial del 7%. Listar los
nombres
de los empleados, su salario actual y su nuevo salario, indicando para cada
uno de ellos
si tiene o no comisión
SELECT nomEmp, salEmp, (salEmp*1.07),comis FROM Empeado;

37. Obtener la información disponible del empleado cuyo número de


documento de identidad sea: '31.178.144', '16.759.060', '1.751.219',
'768.782', '737.689', '19.709.802','31.174.099', '1.130.782'
SELECT nDIEmp, nomEmp FROM Empeado
WHERE
nDIEmp IN ('31.178.144', '16.759.060','1.751.219', '768.782', '737.689','19.709.802', '31.174.099','1.130.782');
38. Entregar un listado de todos los empleados ordenado por su
departamento, y alfabético dentro del departamento.
SELECT nDIEmp, nomEmp, nroDepto FROM Empeado
ORDER BY nroDepto, nomEmp;

39. Entregar el salario más alto de la empresa.


SELECT nomEmp FROM Empeado
WHERE salEmp IN (SELECT MAX(salEmp)
FROM Empeado);

40. Entregar el total a pagar por comisiones, y el número de empleados que


las reciben.
SELECT count (nDIEmp), sum (comis) FROM Empeado
WHERE comis > 0;
41. Entregar el nombre del último empleado de la lista por orden alfabético.
SELECT MAX (nomEmp) FROM Empeado;

42. Hallar el salario más alto, el más bajo y la diferencia entre ellos.
SELECT MAX (salEmp), MIN (salEmp),(MAX (salEmp) - MIN (salEmp)) FROM Empeado;
43. Conocido el resultado anterior, entregar el nombre de los empleados que
reciben el salario más alto y más bajo. Cuanto suman estos salarios?
SELECT MAX (salEmp), MIN (salEmp),
(MAX (salEmp) + MIN (salEmp)) FROM Empeado;

44. Entregar el número de empleados de sexo femenino y de sexo masculino,


por departamento.
SELECT nroDepto, sexEmp, COUNT (nomEmp) FROM empeado
GROUP BY nroDepto, sexEmp;
45. Hallar el salario promedio por departamento.

SELECT nroDepto, AVG(salEmp) FROM Empeado


GROUP BY nroDepto;

46. Hallar el salario promedio por departamento, considerando aquellos


empleados cuyo salario supera $900.000, y aquellos con salarios inferiores a
$575.000. Entregar el código y el nombre del departamento.
SELECT D.nomDepto, D.codDepto, N.pro
FROM Departamento D, (SELECT codDepto, AVG(salEmp) AS pro
FROM Empleado
WHERE salEmp > 900000 AND salEmp > 575000 GROUP BY codDepto) N WHERE N.codDepto = D.codDepto;
47. Entregar la lista de los empleados cuyo salario es mayor o igual que el
promedio de la empresa. Ordenarlo por departamento.
SELECT E.nroDepto, E.nomEmp, E.salEmp,N.proT FROM Empeado E,(SELECT AVG(salEmp) AS proT FROM
Empeado) N
WHERE E.salEmp >= N.proT
ORDER BY E.nroDepto;

48. Hallar los departamentos que tienen más de tres (3) empleados. Entregar
el número de empleados de esos departamentos.
SELECT N.nroDepto, D.nombreDpto, N.nro FROM departamento D,(SELECT nroDepto, COUNT(nDIEmp) AS nro
FROM Empeado
GROUP BY nroDepto
HAVING COUNT(nDIEmp)>3) N
WHERE N.nroDepto = D.codDepto;

49. Obtener la lista de empleados jefes, que tienen al menos un empleado a


su cargo. Ordene el informe inversamente por el nombre.
SELECT J.nDIEmp, J.nomEmp FROM Empeado J,(SELECT S.jefeDI FROM Empeado E, empeado S
WHERE E.nDIEmp = S.jefeDI
GROUP BY S.jefeDI
HAVING COUNT (S.nDIEmp)>= 1) P
51. Entregar un reporte con el número de cargos en cada departamento y
cuál es el promedio de salario de cada uno. Indique el nombre del
departamento en el resultado.
INSERT INTO Departamento (codDepto, nombreDpto, ciudad, director)
VALUES ('6000', 'TRANSPORTE', 'CALI', NULL), ('7000', 'COMPRAS', 'CALI', NULL);

51. Entregar un reporte con el número de cargos en cada departamento y


cuál es el promedio de salario de cada uno. Indique el nombre del
departamento en el resultado.
SELECT D.nombreDpto, nCar, proS
FROM Departamento D,
(SELECT nroDepto, COUNT (cargo) AS
nCar, AVG (salEmp) AS proS
FROM Empleado
GROUP BY nroDepto) E
ORDER BY nombreDpto;
52. Entregar el nombre del departamento cuya suma de salarios sea la más
alta, indicando el valor de la suma.
CREATE VIEW SumSalar AS (SELECT nroDepto, SUM (salEmp) AS sumS
FROM Empeado
GROUP BY nroDepto);

53. Entregar un reporte con el código y nombre de cada jefe, junto al número
de empleados que dirige. Puede haber empleados que no tengan
supervisores, para esto se indicará solamente el número de ellos dejando los
valores restantes en NULL.
SELECT D.nDIEmp, D.nomEmp, E.noSu
FROM Empeado D,
(SELECT jefeDI, COUNT(nDIEmp) AS noSu
FROM Empeado
WHERE jefeDI IS NOT NULL
GROUP BY jefeDI) E
WHERE D.nDIEmp = E.jefeDI
ORDER BY E.noSu DESC
;

También podría gustarte