PRÁCTICA Soluciones SQL- 67 B
1. Obtener por orden alfabético los nombres de los empleados cuyos sueldos igualan o
superan al de Claudia Fierro en más del 50%
select nomem
from temple
where salar >= (select salar*1.5
from temple
where nomem='FIERRO, CLAUDIA')
ORDER BY NOMEM;
NOMEM
--------------------
LOPEZ, ANTONIO
2. Obtener por orden alfabético los nombres de los empleados cuyo salario supera al
máximo salario de los empleados del departamento 122.
select nomem
from temple
where salar>all(select salar
from temple
where numde=122)
order by nomem;
NOMEM
--------------------
LOPEZ, ANTONIO
PEREZ, MARCOS
3. Obtener por orden alfabético los nombres de los empleados cuyo salario supera en tres
veces y media o más al mínimo salario de los empleados del departamento 122.
select nomem
from temple
where salar/3.5>= some(select salar
from temple
where numde=122)
order by nomem;
NOMEM
--------------------
LOPEZ, ANTONIO
4. Obtener los nombres y salarios de los empleados cuyo salario coincide con la comisión
de algún otro o la suya propia. Ordenarlos alfabéticamente.
select nomem, salar
from temple
where salar = any (select comis from temple)
order by nomem;
NOMEM SALAR
-------------------- ---------
SANTOS, SANCHO 100
5. Obtener por orden alfabético los nombres y los salarios de los empleados cuyo salario
es inferior a la comisión más alta existente. select nomem, salar
from temple
where salar<any(select comis from temple)
order by nomem;
NOMEM SALAR
-------------------- ---------
SANTOS, SANCHO 100
6. Obtener por orden alfabético los nombres y salarios de los empleados cuyo salario es
inferior al cuádruplo de la comisión más baja existente.
select nomem, salar
from temple
where salar<all(select comis*4
from temple
where comis is not null)
order by nomem;
NOMEM SALAR
-------------------- ---------
LARA, LUCRECIA 185
MARTIN, MICAELA 180
MUÑOZ, AZUCENA 175
RUIZ, FABIOLA 190
SANTOS, SANCHO 100
TORRES, HORACIO 180
6 filas seleccionadas.
7. Obtener por orden alfabético los nombres de los departamentos que trabajan en el
mismo departamento que Pilarica Gálvez y Doroteita Flor.
select nomem
from temple
where numde in (select numde
from temple
where nomem in
('GALVEZ, PILAR','FLOR, DOROTEA'))
ORDER BY NOMEM;
NOMEM
--------------------
ALBA, ADRIANA
FIERRO, CLAUDIA
FLOR, DOROTEA
GALVEZ, PILAR
GARCIA, AUGUSTO
LOPEZ, ANTONIO
6 filas seleccionadas.
8. Obtener el nombre de los centros de trabajo si hay alguno que este en la calle Atocha.
select nomce
from tcentr
where exists (select *
from tcentr
where domi like '%ATOCHA%')
order by nomce;
NOMCE
-------------------------
RELACIÓN CON CLIENTES
SEDE CENTRAL
9. Obtener por orden alfabético los nombres y comisiones de los empleados del
departamento 110 si hay en él algún empleado que tenga comisión.
select nomem, comis
from temple
where numde=110
and exists (select * from temple
where numde=110 and comis is not null)
order by nomem;
NOMEM COMIS
-------------------- ---------
CAMPOS, ROMULO
MORAN, CARMEN
PEREZ, MARCOS 50
10. Hallar por orden de numero de empleado el nombre y salario total (salario más
comisión) de los empleados cuyo salario total supera al salario mínimo en 100.000 Ptas.
mensuales.
select numem, nomem, salar+comis
from temple
where salar+comis >any (select salar+100
from temple)
order by numem;
NUMEM NOMEM SALAR+COMIS
--------- -------------------- -----------
120 LASA, MARIO 460
160 AGUIRRE, AUREO 420
180 PEREZ, MARCOS 530
270 GARCIA, OCTAVIO 460
11. Obtener por orden alfabético los nombres y salarios de los empleados del
departamento 111 que tienen comisión si hay alguno de ellos cuya comisión supere al 15%
de salario.
select nomem, salar
from temple
where numde=111 and comis is not null and
exists(select * from temple
where numde = 111 and
comis is not null and
comis>0.15*salar)
order by nomem;
NOMEM SALAR
-------------------- ---------
AGUIRRE, AUREO 310
DURAN, LIVIA 210
LARA, DORINDA 250
PINO, DIANA 210
SANTOS, SANCHO 100
SANZ, LAVINIA 280
VAZQUEZ, HONORIA 200
7 filas seleccionadas.
12. Hallar por orden alfabético los nombres y los salarios de los empleados de los
departamentos 110 y 111 que o bien no tienen hijos o bien su salario por hijo supere a
100000 ptas., si hay alguno sin comisión en los departamentos 111 ó 112.
select nomem, salar
from temple
where (numde=110 or numde=111) and
(numhi=0 or salar>100*numhi) and
exists (select * from temple
where (numde=111 or numde=112)
and comis is null)
order by nomem;
NOMEM SALAR
-------------------- ---------
AGUIRRE, AUREO 310
CAMPOS, ROMULO 200
DURAN, LIVIA 210
LARA, DORINDA 250
LARA, LUCRECIA 185
MORAN, CARMEN 215
PEREZ, MARCOS 480
PINO, DIANA 210
SANTOS, SANCHO 100
VAZQUEZ, HONORIA 200
10 filas seleccionadas.
13. Obtener por orden alfabético los salarios y nombres de los empleados cuyo salario se
diferencia con el máximo en menos de un 40% de éste.
select salar, nomem
from temple
where salar >= (select 0.6 * max(salar)
from temple)
order by nomem;
SALAR NOMEM
--------- --------------------
450 ALBA, ADRIANA
450 CAMPS, AURELIO
720 LOPEZ, ANTONIO
440 PEREZ, JULIO
480 PEREZ, MARCOS
14. Hallar la edad en años cumplidos del empleado más viejo del departamento 110.
select distinct trunc((sysdate-fecna)/365)
from temple
where numde = 110 and
fecna = ( select min(fecna)
from temple
where numde =110);
TRUNC((SYSDATE-FECNA)/365)
--------------------------
56
15. Hallar el salario medio de los empleados cuyo salario no supera en más de 20% al salario
mínimo de los empleados que tienen algún hijo y su salario es mayor que 100 000 ptas.
select avg(salar)
from temple
where salar<=(select 1.20*min(salar)
from temple
where numhi<>0 and
salar>numhi*100);
AVG(SALAR)
----------
189,61538
16. Hallar el presupuesto medio de los departamentos cuyo presupuesto supera al
presupuesto medio de los departamentos.
select avg(presu)
from tdepto
where presu>(select avg(presu)
from tdepto);
AVG(PRESU)
----------
13,5
17. Obtener por orden alfabético los nombres y los salarios de los empleados que o bien
ingresaron después del 01-01-88 o bien antes y además tienen salario inferior al salario
más bajo de los que ingresaron con posterioridad al 01-01-88 incrementado en un 100%.
select nomem, salar
from temple
where fecin > '01-ENE-88'
or (fecin <= '01-ENE-88' and
salar < (select min(salar)*2
from temple
where fecin>'01-ENE-88'))
order by nomem;
NOMEM SALAR
-------------------- ---------
FIERRO, CLAUDIA 400
LARA, LUCRECIA 185
MARTIN, MICAELA 180
MORA, VALERIANA 210
MUÑOZ, AZUCENA 175
RUIZ, FABIOLA 190
SANTOS, SANCHO 100
TORRES, HORACIO 180
8 filas seleccionadas.
18. Hallar el salario medio por departamento para aquellos departamentos cuyo salario
máximo es inferior al salario medio de todos los empleados.
select numde, avg(salar)
from temple
group by numde
having max(salar)<(select avg(salar)
from temple)
order by numde;
NUMDE AVG(SALAR) --------- ----------
120 270
19. Para los departamentos en los que hay algún empleado cuyo salario sea mayor que
400.000 ptas. al mes hallar el número de empleados y la suma de sus salarios,
comisiones y número de hijos.
select numde, count(*), sum(salar),
sum(comis), sum(numhi)
from temple
where numde in (select distinct numde
from temple
where salar>400)
group by numde
order by numde;
NUMDE COUNT(*) SUM(SALAR) SUM(COMIS) SUM(NUMHI)
--------- --------- ---------- ---------- ----------
100 3 1550 8
110 3 895 50 4
121 4 1240 8
122 5 1620 4
130 3 1110 5
20. Para los departamentos en los que la antigüedad media de sus empleados supera a la de
la empresa, hallar el salario mínimo, el medio y el máximo.
select numde, min(salar), avg(salar), max(salar)
from temple
group by numde
having avg(sysdate-fecin)>( select avg(sysdate-fecin)
from temple)
order by numde;
NUMDE MIN(SALAR) AVG(SALAR) MAX(SALAR)
--------- ---------- ---------- ----------
100 380 516,66667 720
120 270 270 270
121 190 310 440
21. Para los departamentos en los que algún empleado tiene comisión, hallar cuantos
empleados hay en promedio por cada extensión telefónica.
select numde, 100*count(*)/count(distinct extel)
from temple
where numde in (select distinct numde
from temple
where comis is not null)
group by numde
order by numde;
NUMDE 100*COUNT(*)/COUNT(DISTINCTEXTEL)
--------- ---------------------------------
110 100
111 200
112 140
22. Obtener por orden creciente los números de extensiones telefónicas de los
departamentos que tienen más de dos y que son compartidas por menos de 4 empleados,
excluyendo las que no son compartidas.
select extel
from temple
where numde in (select numde
from temple
group by numde
having count (distinct extel)>2)
group by extel
having count(*) between 2 and 3
order by extel;
EXTEL
---------
340
350
620
750
760
780
850
880
8 filas seleccionadas.
23. Para los departamentos cuyo salario medio supera al de la empresa hallar cuántas
extensiones telefónicas tienen.
select numde, count (distinct extel)
from temple
group by numde
having avg(salar)>(select avg(salar)
from temple)
order by numde;
NUMDE COUNT(DISTINCTEXTEL)
--------- --------------------
100 3
121 3
122 4
130 3
24. Hallar el máximo valor de la suma de los salarios de los departamentos.
select numde, sum(salar)
from temple
group by numde
having sum(salar)>=all (select sum(salar)
from temple
group by numde)
order by numde;
NUMDE SUM(SALAR)
--------- ----------
112 1870