Está en la página 1de 3

PRCTICA

Soluciones SQL 6-7D

Realizar las siguientes subconsultas mediante UNIONES de SELECT.


1.

Hallar el salario medio y la edad media en aos de los empleados que tienen comisin y
los que no.
select 'con
from temple
where comis
union
select 'sin
from temple
where comis
'CONCOMISIN
-----------con comisin
sin comisin

comisin', sysdate, avg(salar), avg(sysdate-fecna)


is not null
comisin',

sysdate, avg(salar), avg(sysdate-fecna)

is null;

SYSDATE AVG(SALAR) AVG(SYSDATE-FECNA)


-------- ---------- -----------------08/10/03 266,42857
13600,83
08/10/03
328,5
13749,109

2. Para los empleados que no tienen comisin, obtener por orden alfabtico el nombre y el
cociente entre su salario y el nmero de hijos, pero si un empleado no tiene hijos,
obtener el salario sin ms, indicando este caso con un literal.
select nomem, salar/numhi, '(salar/hijos)'
from temple
where comis is null and numhi>0
union
select nomem, salar, '(salario)'
from temple
where comis is null and numhi =0
order by 1;
NOMEM
SALAR/NUMHI '(SALAR/HIJOS
-------------------- ----------- ------------ALBA, ADRIANA
450 (salario)
CAMPOS, ROMULO
200 (salar/hijos)
CAMPS, AURELIO
450 (salar/hijos)
FIERRO, CLAUDIA
400 (salario)
FLOR, DOROTEA
58 (salar/hijos)
GALVEZ, PILAR
190 (salar/hijos)
GARCIA, AUGUSTO
420 (salario)
GIL, GLORIA
90 (salar/hijos)
LARA, LUCRECIA
185 (salario)
LOPEZ, ANTONIO
120 (salar/hijos)
MARTIN, MICAELA
180 (salario)
MORA, VALERIANA
210 (salar/hijos)
MORAN, CARMEN
215 (salar/hijos)
MUOZ, AZUCENA
175 (salario)
PEREZ, JULIO
440 (salario)
POLO, OTILIA
380 (salario)
PONS, CESAR
103,33333 (salar/hijos)
RUIZ, FABIOLA
190 (salar/hijos)
SANZ, CORNELIO
202,5 (salar/hijos)
VEIGA, JULIANA
75 (salar/hijos)
20 filas seleccionadas.

3. Para los empleados que trabajan en la calle de Atocha y su salario supera al salario
medio de su departamento, obtener por orden alfabtico su nombre y su salario total
(salario, o salario ms comisin en los que la tengan).
select nomem, salar+comis
from temple e, tdepto d, tcentr c
where e.numde=d.numde and d.numce=c.numce
and domi like '%ATOCHA%' and
salar > (select avg(salar)
from temple
where numde=e.numde)
and comis is not null
union
select nomem, salar
from temple e, tdepto d, tcentr c
where e.numde=d.numde and d.numce=c.numce
and domi like '%ATOCHA%' and
salar > (select avg(salar)
from temple
where numde=e.numde)
and comis is null
order by 1;
NOMEM
SALAR+COMIS
-------------------- ----------AGUIRRE, AUREO
420
DIEZ, AMELIA
370
GARCIA, OCTAVIO
460
LARA, DORINDA
350
LASA, MARIO
460
PEREZ, MARCOS
530
SANZ, LAVINIA
380
TEROL, LUCIANO
400
8 filas seleccionadas.

4. Obtener por departamento la masa salarial total (suma de salarios y comisiones del
departamento) y el nombre, por orden alfabtico.
select nomde, sum(salar) + sum(comis)
from temple e, tdepto d
where d.numde=e.numde
group by d.numde, d.nomde
having count(distinct comis)>0
union
select nomde, sum(salar)
from temple e, tdepto d
where d.numde=e.numde
group by d.numde, d.nomde
having count(distinct comis)=0
order by 1;
NOMDE
SUM(SALAR)+SUM(COMIS)
-------------------- --------------------DIRECCIN COMERCIAL
945
DIRECCIN GENERAL
1550
FINANZAS
1110
ORGANIZACIN
270
PERSONAL
1240
PROCESO DE DATOS
1620
SECTOR INDUSTRIAL
2475
SECTOR SERVICIOS
2460
8 filas seleccionadas.

5. Efectuar una explosin de la organizacin de los departamentos. Es decir, para cada


departamento obtener su nombre, el de los que dependan de l y el nivel al que
dependen. Si un departamento depende directamente de otro, este nivel ser 1, si
depende de uno que depende directamente de este ser 2, y as sucesivamente. Se
considera que un departamento depende de s mismo a nivel 0. La primera columna del
resultado ser el nombre de un departamento, la segunda el de un departamento que
depende de l y la tercera el nivel al que depende. Considerar un mximo de 4 niveles
de dependencia. Presentar el resultado por orden alfabtico. Si un departamento no
dependiera de ningn otro, aparecer al menos dependiendo de s mismo a nivel 0.
select nomde, nomde, 0
from tdepto
union
select d0.nomde, d1.nomde,1
from tdepto d0, tdepto d1
where d0.numde = d1.depde
union
select d0.nomde,d2.nomde,2
from tdepto d0, tdepto d1, tdepto d2
where d0.numde = d1.depde and d1.numde=d2.depde
union
select d0.nomde,d3.nomde,3
from tdepto d0, tdepto d1, tdepto d2, tdepto d3
where d0.numde = d1.depde and d1.numde=d2.depde and
d2.numde=d3.depde
union
select d0.nomde,d4.nomde,4
from tdepto d0, tdepto d1, tdepto d2, tdepto d3, tdepto d4
where d0.numde = d1.depde and d1.numde=d2.depde and
d2.numde=d3.depde and d3.numde=d4.depde
order by 1,3,2;
NOMDE
-------------------DIRECCIN COMERCIAL
DIRECCIN COMERCIAL
DIRECCIN COMERCIAL
DIRECCIN GENERAL
DIRECCIN GENERAL
DIRECCIN GENERAL
DIRECCIN GENERAL
DIRECCIN GENERAL
DIRECCIN GENERAL
DIRECCIN GENERAL
DIRECCIN GENERAL
FINANZAS
ORGANIZACIN
ORGANIZACIN
ORGANIZACIN
PERSONAL
PROCESO DE DATOS
SECTOR INDUSTRIAL
SECTOR SERVICIOS

NOMDE
0
-------------------- --------DIRECCIN COMERCIAL
0
SECTOR INDUSTRIAL
1
SECTOR SERVICIOS
1
DIRECCIN GENERAL
0
DIRECCIN COMERCIAL
1
FINANZAS
1
ORGANIZACIN
1
PERSONAL
2
PROCESO DE DATOS
2
SECTOR INDUSTRIAL
2
SECTOR SERVICIOS
2
FINANZAS
0
ORGANIZACIN
0
PERSONAL
1
PROCESO DE DATOS
1
PERSONAL
0
PROCESO DE DATOS
0
SECTOR INDUSTRIAL
0
SECTOR SERVICIOS
0

19 filas seleccionadas.

También podría gustarte