EJERCICIO-2 de
SQL ST RUCT URE Q QUER Y LANGUAJE “Lengua je d de C Consultas Estructurado”
1
EJERCICIOS S SEGUNDA P PART E: Consultas A AVANZADAS
Los ejercicios a realizar van a recuperar datos de dos tablas: la tabla de empleados (TEMPLE1) y la de departamentos (TDEPAR2).
Los nombres reales y características de las columnas se muestran en la siguiente tabla:
TABLA
(Tabla de Empleados)
TEMPLE1
(Tabla de Departamentos) TDEPAR2
NOMBRE
TIPO
LONGITUD
NUEMPL NOMBRE INICIAL APELLIDO DEPT TLFN FECHING CODTRA NIVEDUC SEXO FECHNAC SALARIO
CHAR CHAR DATE DECIMAL DECIMAL CHAR DATE DECIMAL
(9,2)
NO NO NO NO NO NO
NUMDEP NOMDEP NUMDIREC
CHAR CHAR CHAR
3 36 6
NO NO NO
2
CHAR CHAR CHAR CHAR
6 12 1 15 3 4
NULOS
2 2 1
NO NO NO NO NO
SI
Contenido de las tablas: tabla de empleados....... TEMPLE1
nuempl 000010 000020 000030 000050 000060 000070 000090 000100 000110 000120 000130 000140 000150 000160 000170 000180 000190 000200 000210 000220 000230 000240 000250 000260 000270 000280 000290 000300 000310 000320 000330 000340 000999
nombre CRI STI NA MI GUEL SALOME J UAN I SI DRO EVA ELENA TOMAS VI CENTE SI MON DOLORES HELI ODORA BRUNO ELI SA MATEO MARI NA J AI ME DAVI D WENCESL AO J I MENA J AI ME SALVADOR DANI EL SUSANA MARI A ENGRACI A J UAN PEDRO MATI LDE RAMON WI LLY J AVI ER ANGEL
i
apellido
dept
tlfn
feching
ctr
nv
s
fechnac
salario
I HERNANDEZ L TAPI A A KEMPES B GARRI DO F SUAREZ D PUENTE W HERRANZ Q SOLER G LUENGO OTERO M QUI NTANA A NI ETO ALVAREZ PI NTO R J YARZA S SANDOVAL H WALKER BONDI A T J URADO K LUQUE J J I MENEZ M MARTI NEZ S SI ERRA P J UNQUERA L PEREZ R SANCHEZ R PALACI OS I SI ERRA F SERNA V MORAN LERMA R GI L
A00 B01 C01 E01 D11 D21 E11 E21 A00 A00 C01 C01 D11 D11 D11 D11 D11 D11 D11 D11 D21 D21 D21 D21 D21 E11 E11 E11 E11 E21 E21 E21
2070 2140 2080 1507 2290 2400 2230 2170 1140 2022 2140 2210 2250 1307 2050 1050 2100 2340 2310 2300 1080 2260 2357 2302 2217 2007 2192 3522 2130 7112 1132 1162
01. 01. 1965 10. 10. 1973 05. 04. 1975 17. 08. 1949 14. 09. 1973 30. 09. 1980 15. 08. 1970 19. 06. 1980 16. 05. 1958 05. 12. 1963 28. 07. 1971 15. 12. 1976 12. 02. 1971 11. 10. 1977 15. 09. 1978 07. 07. 1973 27. 07. 1974 03. 03. 1966 11. 04. 1979 29. 08. 1968 21. 11. 1966 05. 12. 1979 30. 10. 1969 11. 09. 1975 30. 09. 1980 24. 03. 1967 30. 05. 1980 19. 06. 1972 12. 09. 1964 07. 07. 1965 23. 02. 1976 05. 05. 1947
66 61 60 58 55 56 55 54 58 58 55 56 55 54 54 53 53 55 52 55 53 55 52 52 55 54 42 48 43 52 55 54
18 18 20 16 16 16 16 14 19 14 16 18 16 17 16 17 16 16 17 18 14 17 15 16 15 17 12 14 12 16 14 16
M H M H H M M H H H M M H M H M H H H M H H H M M M H H M H H H
14. 08. 1933 02. 02. 1948 11. 05. 1941 15. 09. 1925 07. 07. 1945 26. 05. 1953 15. 05. 1941 18. 12. 1956 05. 11. 1929 18. 10. 1942 15. 09. 1925 19. 01. 1946 17. 05. 1947 12. 04. 1955 05. 01. 1951 21. 02. 1949 25. 06. 1952 29. 05. 1941 23. 02. 1953 19. 03. 1948 30. 05. 1935 31. 03. 1954 12. 11. 1939 05. 10. 1936 23. 05. 1953 15. 05. 1941 09. 07. 1946 27. 10. 1936 21. 04. 1931 11. 08. 1932 18. 07. 1941 17. 05. 1926
5275000 4125000 3825000 4017500 3225000 3617000 2945200 2615000 4650000 2925000 2380000 2842000 2528000 2225000 2468000 2134000 2045000 2774000 1827000 2984000 2218000 2876000 1918000 1725000 2738000 2598700 1380600 1775000 1574100 1995000 2537000 2384000
E11
----
22. 03. 1988
69
20
H
12. 11. 1965
7500000
E
MALDONADO
Tabla de departamentos....TDEPAR2
numdep
nomdep
numdir ec
A00
CENTRO PROCESOS
000010
B01
PLANIFICACION
000020
C01
INFORMACION
000030
D01
DESARROLLO
D11
FABRICACION
000060
D21
ADMINISTRACION
000070
E01
SERVICIOS
000050
E11
OPERACIONES
000090
E21
SOFTWARE
000100
3
SEGUNDA PARTE 1.-
Obtener una lista de todas las empleadas de los departamentos que empiecen por D y por E. La lista anterior debe contener información sobre el número de personal, nombre, apellido y número de teléfono.
2.-
Obtener un listado de todos los empleados (nombre y apellido) que ganan más de 200000 pts. al mes y que entraron en la compañía después del 1 de Enero de 1975. También se quiere la información correspondiente a su código de trabajo y al número de personal de sus directores.
3.-
Obtener una lista con el apellido, número de departamento y salario mensual de los empleados de los departamentos ‘A00’, ‘B01’, ‘C01’ y ‘D01’. La salida se quiere en orden descendente de salario dentro de cada departamento.
4.-
Se pide una lista que recupere el salario medio de cada departamento junto con el número de empleados que tiene. El resultado no debe incluir empleados que tengan un código de trabajo mayor que 54, ni departamentos con menos de tres empleados. Se quiere ordenada por número de departamento.
5.-
Seleccionar todos los empleados de los departamentos ‘D11’ y ‘E11’ cuyo primer apellido empiece por S.
4
SEGUNDA PARTE 6.-
Obtener el nombre, apellido y fecha de ingreso de los directores de departamento ordenados por número de personal.
7.-
Obtener un listado de las mujeres de los departamentos que empiecen por D y por E cuyo nivel de educación sea superior a la media; en este caso también ordenados por número de personal.
8.-
Seleccionar todos los empleados cuyo nombre sea igual al de algunas personas del departamento D21 y cuyo código de trabajo sea diferente de todos los del E21 (la lista debe contener el número de personal, nombre, apellido, departamento y código de trabajo).
9.-
Listar los empleados que no sean directores (la información que debe aparecer es el número de personal, apellido y departamento).
10.-
Seleccionar parejas de empleados (de sexo opuesto) que hayan nacido el mismo día (con información acerca de apellido y fecha de nacimiento).
11.-
Obtener un listado de todo los empleados que pertenecen al mismo departamento que Tomás Soler.
5
Soluciones SEGUNDA PARTE 1.-
Obtener una lista de todas las empleadas de los departamentos cuyo código comience por 'D' y 'E'. La lista anterior debe contener información sobre el número de personal, nombre, apellido y número de teléfono. SELECT NUEMPL,NOMBRE,APELLIDO,TLFN FROM TEMPLE1 WHERE SEXO = 'M' AND (DEPT LIKE 'D%' OR DEPT LIKE 'E%')
; 2.-
Obtener un listado de todos los empleados (nombre y apellido) que ganan más de 200000 pts. al mes y que entraron en la compañía después del 1 de Enero de 1975. También se quiere la información correspondiente a su código de trabajo y al número de personal de sus directores. SELECT NOMBRE,APELLIDO,CODTRA,NIVEDUC FROM TEMPLE1 , TDEPAR2 WHERE DEPT=NUMDEP AND SALAR / 14 > 200000 AND FECHING > '01-01-1975'
; 3.-
Obtener una lista con el apellido, número de departamento y salario mensual de los empleados de los departamentos A00, B01, C01 y D01. La salida se quiere en orden descendente de salario dentro de cada departamento. SELECT APELLIDO, DEPT, SALAR/14 FROM TEMPLE1 WHERE DEPT IN ('A00', 'B01', 'C01', 'D01') ORDER BY DEPT, SALAR DESC ;
SELECT APELLIDO, DEPT, SALAR/14 FROM TEMPLE1 WHERE DEPT = 'A00' OR DEPT = 'B01' OR DEPT = 'C01' OR DEPT= 'D01' ORDER BY DEPT, SALAR DESC
;
6
4.-
Se pide una lista que recupere el salario medio de cada departamento junto con el número de empleados que tiene. El resultado no debe incluir empleados que tengan un código de trabajo mayor que 54, ni departamentos con menos de tres empleados. Se quiere ordenada por número de departamento. SELECT DEPT, AVG(SALAR) , COUNT(*) FROM TEMPLE1 WHERE CODTRA <= 54 GROUP BY DEPT HAVING COUNT(*) > 2 ORDER BY DEPT
; 5.-
Seleccionar todos los empleados de los departamentos D11 y E11 cuyo primer apellido empiece por S. SELECT NUEMPL,NOMBRE,APELLIDO FROM TEMPLE1 WHERE (DEPT = 'D11' OR DEPT = 'E11') AND APELLIDO LIKE 'S%'
; 6.-
Obtener el nombre, apellido y fecha de ingreso de los directores de departamento ordenados por número de personal. SELECT NOMBRE,APELLIDO,FECHING FROM TEMPLE1 , TDEPAR2 WHERE NUEMPL = NUMDIREC ORDER BY NUEMPL SELECT NOMBRE,APELLIDO,FECHING FROM TEMPLE1 WHERE NUEMPL IN (SELECT NUMDIREC FROM TDEPAR2) ORDER BY NUEMPL
; 7.-
Obtener un listado de las mujeres de los departamentos que comiencen por D y E cuyo nivel de educación sea superior a la media; en este caso también ordenados por número de personal. SELECT NUEMPL,NOMBRE,APELLIDO FROM TEMPLE1 WHERE SEXO = 'M' AND (DEPT LIKE 'D%' OR DEPT LIKE 'E%') AND NIVEDUC > (SELECT AVG(NIVEDUC) FROM TEMPLE1) ORDER BY NUEMPL
;
7
8.-
Seleccionar todos los empleados cuyo nombre sea igual al de algunas personas del departamento D21 y cuyo código de trabajo sea diferente de todos los del E21 (la lista debe contener el número de personal, nombre, apellido, departamento y código de trabajo). SELECT NUEMPL,NOMBRE,APELLIDO,DEPT,CODTRA FROM TEMPLE1 WHERE NOMBRE = ANY ( SELECT NOMBRE FROM TEMPLE1 WHERE DEPT = 'D21' ) AND CODTRA <> ALL ( SELECT CODTRA FROM TEMPLE1 WHERE DEPT = 'E21' ) AND DEPT <> 'D21'
; 9.-
Listar los empleados que no sean directores (la información que debe aparecer es el número de personal, apellido y departamento). SELECT DEPT, NUEMPL, APELLIDO,DEPT FROM TEMPLE1 WHERE NUEMPL <> ALL (SELECT NUMDIREC FROM TDEPAR2) ORDER BY DEPT SELECT DEPT, NUEMPL, APELLIDO,DEPT FROM TEMPLE1 WHERE NOT EXISTS (SELECT NUMDIREC FROM TDEPAR2 WHERE NUMDIREC = TEMPLA.NUEMPL) ORDER BY DEPT SELECT DEPT, NUEMPL, APELLIDO,DEPT FROM TEMPLE1, TDEPAR2 WHERE DEPT = NUMDEP AND NUEMPL <> NUMDIREC ORDER BY DEPT
10.-
Seleccionar parejas de empleados (de sexo opuesto) que hayan nacido el mismo día (con información acerca de apellido y fecha de nacimiento). SELECT M.NOMBRE, M.APELLIDO, M.FECHNAC, '<===>', H.NOMBRE, H.APELLIDO, H.FECHNAC FROM TEMPLE1 M, TEMPLE1 H WHERE H.FECHNAC = M.FECHNAC AND H.SEXO = 'H' AND M.SEXO = 'M'
; 11.-
Obtener un listado de todo los empleados que pertenecen al mismo departamento que Tomás Soler. SELECT NUEMPL, NOMBRE, APELLIDO FROM TEMPLE1 WHERE DEPT = ( SELECT DEPT FROM TEMPLE1 WHERE NOMBRE = 'TOMAS' AND APELLIDO = 'SOLER' ) AND ( NOMBRE <> 'TOMAS' AND APELLIDO <> 'SOLER' )
;
8