Sunteți pe pagina 1din 10

1. Mostrar todas las tuplas con todas las columnas de cada tabla.

SELECT * FROM TCENTR;


SELECT * FROM TDEPTO;
SELECT * FROM TEMPLE;
2. Obtener los nombres de todos los centros de trabajo de la empresa
clasificados por orden alfabtico.

SELECT NOMEM, NUMEM, EXTEL


FROM TEMPLE
WHERE NUMDE = 121
ORDER BY NOMEM;
13. Obtener por orden decreciente una relacin de todos los nmeros de
extensiones telefnicas de los empleados.

SELECT NOMCE FROM TCENTR ORDER BY NOMCE;


3. Mostrar los datos de la tabla TCENTR ordenados descendentemente por
su nmero de centro.
SELECT * FROM TCENTR ORDER BY NUMCE DESC;
4. Obtener los nombres de los empleados que trabajan en el departamento
121.
SELECT NOMEM
FROM TEMPLE
WHERE NUMDE = 121;
5. Mostrar todos los datos del departamento 121.
SELECT * FROM TDEPTO
WHERE NUMDE = 121;
6. Obtener los nombres y sueldos de los empleados con ms de tres hijos
por orden alfabtico.
SELECT NOMEM, SALAR FROM TEMPLE
WHERE NUMHI > 3
ORDER BY 1;
7. Obtener la comisin, departamento y nombre, de los empleados cuyo
salario es inferior a 1900, clasificndolos por departamento en orden
creciente, y por comisin en orden decreciente dentro de cada
departamento.
SELECT COMIS, NUMDE, NOMEM
FROM TEMPLE
WHERE SALAR < 1900
ORDER BY NUMDE, COMIS DESC;
8. Obtener por orden alfabtico los nombres de los departamentos cuyo
presupuesto (PRESU) sea superior a 100.000 (tenga en cuenta que en la
tabla TDEPTO el presupuesto est en miles de euros).
SELECT NOMDE FROM TDEPTO
WHERE PRESU > 100
ORDER BY NOMDE;
9. Obtener los nmeros de los departamentos donde trabajan empleados
cuyo salario sea menor de 2500.
SELECT DISTINCT NUMDE FROM TEMPLE
WHERE SALAR < 2500
ORDER BY NUMDE;
10. Obtener los valores diferentes de comisiones que hay en el
departamento 110 (Si la comisin es NULL deber mostrarse como 0).
SELECT DISTINCT NVL(COMIS,0)
FROM TEMPLE
WHERE NUMDE = 110;
11. Hallar por orden alfabtico los nombres de los departamentos cuyo
director lo es en funciones (columna TIDIR es F) y no en propiedad.
SELECT NOMDE
FROM TDEPTO
WHERE TIDIR = 'F'
ORDER BY NOMDE;
12. Obtener un listn telefnico de los empleados del departamento 121
incluyendo nombre de empleado, nmero de empleado y extensin
telefnica. Por orden alfabtico.

SELECT DISTINCT EXTEL


FROM TEMPLE
ORDER BY EXTEL DESC;
14. Hallar la comisin, nombre y salario de los empleados con dos o ms
hijos, clasificados por comisin, y dentro de comisin por orden alfabtico.
SELECT COMIS, NOMEM, SALAR
FROM TEMPLE
WHERE NUMHI >= 2
ORDER BY COMIS, NOMEM;
15. Obtener salario y nombre de los empleados sin hijos por orden
decreciente de salario y por orden alfabtico dentro de salario.
SELECT SALAR, NOMEM
FROM TEMPLE
WHERE NUMHI = 0
ORDER BY SALAR DESC, NOMEM;
16. Ejecute las siguientes consultas y extraiga conclusiones.
SELECT USER FROM TDEPTO;
SELECT USER FROM TEMPLE WHERE NUMHI > 4;
SELECT DISTINCT USER FROM TEMPLE;
SELECT DISTINCT USER FROM TDEPTO;
USER: Devuelve el identificador de usuario de la sesin actual.
Las consultas obtienen tantas filas con USER como tuplas devuelva dicha
consulta. Con DISTINCT se limita a una sola fila para USER
independientemente del nmero de filas de la tabla.

17. Hallar las diferentes combinaciones de valores de comisin y salario en


el departamento 111, por orden de comisin y salario crecientes.
SELECT DISTINCT COMIS, SALAR FROM TEMPLE
WHERE NUMDE = 111
ORDER BY COMIS, SALAR;
18. Obtener los nombres y sueldos anuales expresados en euros, de los
empleados del departamento 100. Presentarlos por orden decreciente de
sueldos anuales.
SELECT NOMEM, SALAR * 12
FROM TEMPLE
WHERE NUMDE = 100
ORDER BY 2 DESC;
19. Obtener los nombres de los empleados cuya comisin es superior o
igual al 50 % de su salario, por orden alfabtico.
SELECT NOMEM, COMIS, SALAR FROM TEMPLE
WHERE COMIS >= 0.5*SALAR
ORDER BY NOMEM;
20. Obtener una relacin por orden alfabtico de los departamentos cuyo
presupuesto es inferior a 50.000 euros (PRESU est almacenado en miles
de euros). El nombre de los departamentos vendr precedido de las
palabras 'DEPARTAMENTO DE'.
SELECT 'DEPARTAMENTO DE', NOMDE FROM TDEPTO
WHERE PRESU < 50
ORDER BY NOMDE;
SELECT 'DEPARTAMENTO DE ' || NOMDE DEPARTAMENTOS
FROM TDEPTO
WHERE PRESU < 50

ORDER BY DEPARTAMENTOS;
21. Como ayuda familiar se van a dar a los empleados con 3 o ms hijos
una paga extra de 100 euros por cada hijo (a partir del tercero inclusive).
Muestre por orden alfabtico los empleados, salario, paga extra y salario
total (salario + paga extra).
SELECT NOMEM, SALAR, 100*(NUMHI-2) EXTRA,
SALAR+100*(NUMHI-2) TOTAL
FROM TEMPLE
WHERE NUMHI >=3
ORDER BY NOMEM;
22. Llamemos presupuesto medio mensual de un departamento al resultado
de dividir su presupuesto anual por 12. Mostrar por orden alfabtico el
nombre de departamento, su presupuesto anual (PRESU est almacenado
en miles de euros) y su presupuesto mensual.
SELECT NOMDE, PRESU*1000 "P. ANUAL",
PRESU*1000/12 "P. MENSUAL"
FROM TDEPTO
ORDER BY NOMDE;
SELECT NOMDE, TO_CHAR(PRESU*1000, '999G999') "P.
ANUAL",
TO_CHAR(PRESU*1000/12, '999G999D99') "P. MENSUAL"
FROM TDEPTO
ORDER BY NOMDE;
23. Suponiendo que en los prximos tres aos el coste de vida va a
aumentar un 6 % anual y que se suben los salarios en la misma proporcin,
hallar para los empleados con ms de 4 hijos su nombre y su sueldo anual,
actual y para cada uno de los prximos tres aos, clasificados por orden
alfabtico.
SELECT NOMEM, SALAR * 12 ACTUAL, SALAR * 12 * 1.06
"AO 1",
SALAR * 12 * 1.06 * 1.06 "AO 2",
SALAR * 12 * 1.06 * 1.06 * 1.06 "AO 3"
FROM TEMPLE
WHERE NUMHI > 4
ORDER BY NOMEM;
24. Hallar por orden alfabtico los nombres de los empleados tales que si
se les da una gratificacin de 1000 euros por hijo, el total de esta
gratificacn no supera a la dcima parte del salario anual. No se deben
mostrar aquellos empleados que no tienen hijos.
SELECT NOMEM FROM TEMPLE
WHERE NUMHI!=0 AND NUMHI * 1000 <= (SALAR*12)/10
ORDER BY NOMEM;
25. Para los empleados del departamento 112 hallar el nombre y el salario
total de cada uno (salario ms comisin), por orden de salario total
decreciente, y por orden alfabtico dentro de salario total. (preste atencin
si la comisin fuera nula)
SELECT NOMEM, SALAR + NVL(COMIS,0) Total
FROM TEMPLE
WHERE NUMDE = 112
ORDER BY 2 DESC, NOMEM;
26. Hallar por orden de nmero de empleado el nombre y salario total
(salario ms comisin) de los empleados cuyo salario total supera a 3000
euros mensuales.
SELECT NUMEM, NOMEM, SALAR + COMIS
FROM TEMPLE
WHERE SALAR + COMIS > 3000
ORDER BY NUMEM;
/* Teniendo en cuenta cuando COMIS es NULL */
/* OjO! --> SALAR + NULL = NULL */
SELECT NUMEM, NOMEM, SALAR + NVL(COMIS,0), SALAR,
COMIS
FROM TEMPLE
WHERE SALAR + NVL(COMIS,0) > 3000
ORDER BY NUMEM;

27. Obtener los nmeros de los departamentos en los que haya algn
empleado cuya comisin supere al 20 % de su salario.
SELECT DISTINCT NUMDE
FROM TEMPLE
WHERE COMIS > 0.2 * SALAR
ORDER BY NUMDE;
28. Obtener los nombres de los departamentos que no dependen
funcionalmente de otro (columna DEPDE en la tabla TDEPTO).
SELECT NOMDE FROM TDEPTO
WHERE DEPDE IS NULL;
29. Para los empleados que no tienen comisin obtener por orden
alfabtico el nombre y el cociente entre su salario y el nmero de hijos
(evite la divisin por cero).
SELECT NOMEM, SALAR / NUMHI
FROM TEMPLE
WHERE COMIS IS NULL AND NUMHI <> 0
ORDER BY NOMEM;
SELECT NOMEM, SALAR / DECODE (NUMHI, 0, 1, NUMHI)
FROM TEMPLE
WHERE COMIS IS NULL
ORDER BY NOMEM;
30. Se desea hacer un regalo de un 1% del salario a los empleados en el da
de su onomstica. Hallar por orden alfabtico los nombres y cuanta de los
regalos en euros para los que celebren su santo el da de San Honorio.
SELECT NOMEM, SALAR * 0.01
FROM TEMPLE
WHERE NOMEM LIKE '%,%HONORIO%' OR
NOMEM LIKE '%,%HONORIA%'
ORDER BY NOMEM;

31. Hallar por orden de nmero de empleado el nombre y


salario total (salario ms comisin) de los empleados cuyo
salario total supera al salario mnimo en 3000 euros
mensuales.
SELECT NUMEM, NOMEM, SALAR + NVL(COMIS,0)
FROM TEMPLE
WHERE SALAR + NVL(COMIS,0) > (SELECT MIN(SALAR) +
3000 FROM TEMPLE)
ORDER BY NUMEM;
SELECT NUMEM, NOMEM, SALAR + NVL(COMIS,0)
FROM TEMPLE
WHERE SALAR + NVL(COMIS,0) > SOME (SELECT SALAR +
3000 FROM TEMPLE)
ORDER BY NUMEM;
SELECT NUMEM, NOMEM, SALAR + NVL(COMIS,0)
FROM TEMPLE
WHERE SALAR + NVL(COMIS,0)> ANY (SELECT SALAR +
3000 FROM TEMPLE)
ORDER BY NUMEM;
32. Obtener por orden alfabtico los nombres de los
empleados cuyos sueldos igualan o superan al de Claudia
Fierro en ms del 20%.
SELECT NOMEM, SALAR FROM TEMPLE
WHERE SALAR >= 1.2*(SELECT SALAR FROM TEMPLE
WHERE NOMEM = 'FIERRO, CLAUDIA')
ORDER BY NOMEM;
SELECT NOMEM, SALAR FROM TEMPLE
WHERE SALAR >= (SELECT 1.2*SALAR FROM TEMPLE
WHERE NOMEM = 'FIERRO, CLAUDIA')
ORDER BY NOMEM;

33. Obtener por orden alfabtico los nombres y salarios de


los empleados del departamento 111 que tienen comisin
si hay alguno de ellos cuya comisin supere al 15% de su
salario.

sus salarios mensuales totales (Salario + comisin) y


calcular el porcentaje que de su salario mesnsual total
supone la comisin (redondeo con 2 decimales). Ordenar el
resultado alfabticamente por nombre del empleado.

SELECT NOMEM, SALAR FROM TEMPLE


WHERE NUMDE = 111 AND
COMIS IS NOT NULL AND
COMIS > 0.15 * SALAR
ORDER BY NOMEM;

SELECT NOMEM, SALAR+COMIS "TOTAL",


ROUND(100*(COMIS/(SALAR+COMIS)), 2)
"PORCENTAJE"
FROM TEMPLE
WHERE COMIS IS NOT NULL
ORDER BY NOMEM;

34. En la fiesta de Reyes se desea organizar un espectculo


para los hijos de los empleados, que se representar en dos
das diferentes. El primer da asistirn los empleados cuyo
apellido empiece por las letras desde A hasta L, ambas
inclusive. El segundo da se cursarn invitaciones para el
resto. A cada empleado se le asignarn tantas invitaciones
gratuitas como hijos tenga y dos ms. Adems en la fiesta
se entregar a cada empleado un obsequio por hijo.
Obtener una lista por orden alfabtico de los nombres a
quienes hay que invitar el primer da de la representacin,
incluyendo tambin cuntas invitaciones corresponden a
cada nombre y cuntos regalos hay que preparar para l.
(Obsrvese que si dos empleados estn casados, esta
consulta calcular dos veces el nmero de invitaciones
familiar si los hijos figuran en la tabla tanto en la fila del
marido como de la esposa).
SELECT NOMEM, NUMHI + 2 INVITACIONES, NUMHI
REGALOS
FROM TEMPLE
WHERE SUBSTR(NOMEM,1,1) BETWEEN 'A' AND 'L'
ORDER BY NOMEM;
SELECT NOMEM, NUMHI + 2 INVITACIONES, NUMHI
REGALOS
FROM TEMPLE
WHERE SUBSTR(NOMEM,1,1)>='A' AND
SUBSTR(NOMEM,1,1)<='L'
ORDER BY NOMEM;
SELECT NOMEM, NUMHI + 2 INVITACIONES, NUMHI
REGALOS
FROM TEMPLE
WHERE NOMEM BETWEEN 'A' AND 'LZ'
ORDER BY NOMEM;
SELECT NOMEM, NUMHI + 2 INVITACIONES, NUMHI
REGALOS
FROM TEMPLE
WHERE NOMEM >='A' AND NOMEM <='LZ'
ORDER BY NOMEM;
35. Hallar por orden alfabtico los nombres y salarios de
empleados de los departamentos 110 y 111 que o bien no
tengan hijos o bien su salario por hijo supere a 1000 euros.
SELECT NOMEM, SALAR
FROM TEMPLE
WHERE (NUMDE = 110 OR NUMDE = 111) AND
(NUMHI = 0
OR SALAR > 1000 * NUMHI)
ORDER BY NOMEM;
36. Hallar por orden alfabtico los nombres de
departamentos que o bien tienen directores en funciones
(TIDIR 'F') o bien en propiedad (TIDIR 'P') y su presupuesto
anual excede a 50.000 euros (PRESU est en miles) o bien
no dependen de ningn otro.
SELECT NOMDE
FROM TDEPTO
WHERE TIDIR = 'F' OR
(TIDIR = 'P' AND PRESU > 50) OR
DEPDE IS NULL
ORDER BY NOMDE;
37. Para todos los empleados que tienen comisin, hallar

38. Obtener por orden alfabtico los nombres de los


empleados cuyo salario supera al mximo salario de los
empleados del departamento 122.
SELECT NOMEM FROM TEMPLE
WHERE SALAR > (SELECT MAX(SALAR) FROM TEMPLE
WHERE NUMDE = 122)
ORDER BY NOMEM;
SELECT NOMEM FROM TEMPLE
WHERE SALAR > ALL (SELECT SALAR FROM TEMPLE
WHERE NUMDE = 122)
ORDER BY NOMEM;
39. Obtener por orden alfabtico los nombres de los
empleados cuyo salario supera en tres veces y media o
ms al mnimo salario de los empleados del departamento
122.
SELECT NOMEM FROM TEMPLE
WHERE SALAR >= 3.5 *(SELECT MIN(SALAR) FROM TEMPLE
WHERE NUMDE=122)
ORDER BY NOMEM;
SELECT NOMEM FROM TEMPLE
WHERE SALAR >= SOME (SELECT SALAR*3.5 FROM TEMPLE
WHERE NUMDE=122)
ORDER BY NOMEM;
SELECT NOMEM FROM TEMPLE
WHERE SALAR/3.5 >= SOME (SELECT SALAR FROM TEMPLE
WHERE NUMDE=122)
ORDER BY NOMEM;
/* Tambin ANY en lugar de SOME */
40. Obtener los nombres y salarios de los empleados cuyo
salario coincide con la comisin de algn otro o la suya
propia. Ordenarlos alfabticamente.
SELECT NOMEM, SALAR FROM TEMPLE
WHERE SALAR = SOME (SELECT COMIS FROM TEMPLE)
ORDER BY NOMEM;
41. Obtener por orden alfabtico inverso los nombres y
salarios de los empleados cuyo salario es inferior a la
comisin ms alta existente.
SELECT NOMEM, SALAR FROM TEMPLE
WHERE SALAR < (SELECT MAX(COMIS) FROM TEMPLE)
ORDER BY NOMEM DESC;
SELECT NOMEM, SALAR FROM TEMPLE
WHERE SALAR < ANY (SELECT COMIS FROM TEMPLE)
ORDER BY NOMEM DESC;
42. Obtener por orden alfabtico decreciente los nombres y
salarios de los empleados cuyo salario es inferior al
cudruplo de la comisin ms baja existente.
SELECT NOMEM, SALAR FROM TEMPLE
WHERE SALAR < (SELECT MIN(COMIS)*4 FROM TEMPLE)
ORDER BY NOMEM DESC;
SELECT NOMEM, SALAR FROM TEMPLE

WHERE SALAR < ALL (SELECT COMIS*4 FROM TEMPLE


WHERE COMIS IS NOT NULL)
ORDER BY NOMEM DESC;
/* Si se omite la clusula WHERE COMIS IS NOT
NULL. La siguiente consulta */
/* no devuelve ninguna fila porque ningn salario
es menor que NULL */

SELECT NOMEM, LENGTH (NOMEM) LONGITUD


FROM TEMPLE
WHERE COMIS IS NULL
ORDER BY LONGITUD, 1;
48. Hallar por orden alfabtico solamente los apellidos de
todos los empleados.

SELECT NOMEM, SALAR FROM TEMPLE


WHERE SALAR < ALL (SELECT COMIS*4 FROM TEMPLE)
ORDER BY NOMEM DESC;

SELECT SUBSTR(NOMEM, 1, INSTR(NOMEM, ',') -1)


APELLIDO
FROM TEMPLE
ORDER BY 1;

43. Obtener por orden alfabtico los nombres de los


empleados cuyo salario est entre 2500 y 3000 .

49. Hallar por orden alfabtico los nombres de pila de todos


los empleados.

SELECT NOMEM FROM TEMPLE


WHERE SALAR BETWEEN 2500 AND 3000
ORDER BY NOMEM;

SELECT SUBSTR(NOMEM, INSTR(NOMEM, ',') +2) NOMBRE


FROM TEMPLE
ORDER BY NOMBRE;

SELECT NOMEM FROM TEMPLE


WHERE SALAR >= 2500 AND SALAR <=3000
ORDER BY NOMEM;

50. Muestre por orden alfabtico el nombre de pila y


apellido de todos los empleados (en una sola columna).

44. Obtener por orden alfabtico los nombres y salarios de


los empleados cuyo salario dividido por su nmero de hijos
cumpla una, o ambas, de las dos condiciones siguientes:
- que sea inferior a 1200 euros
- que sea superior al doble de su comisin
Se tendrn en cuenta solamente los empleados con hijos
cuya comisin no sea nula.
SELECT NOMEM, SALAR FROM TEMPLE
WHERE (SALAR/NUMHI < 1200 OR SALAR/NUMHI >
2*COMIS)
AND NUMHI > 0 AND COMIS IS NOT NULL
ORDER BY NOMEM;
SELECT NOMEM, SALAR FROM TEMPLE
WHERE SALAR/NUMHI NOT BETWEEN 1200 AND 2*COMIS
AND NUMHI > 0 AND COMIS IS NOT NULL
ORDER BY NOMEM;
45. Obtener por orden alfabtico los nombres de los
empleados cuyo primer apellido es Mora o empieza por
Mora.
SELECT NOMEM FROM TEMPLE
WHERE NOMEM LIKE 'MORA%'
ORDER BY NOMEM;
SELECT NOMEM FROM TEMPLE
WHERE SUBSTR(NOMEM, 1, 4)='MORA'
ORDER BY NOMEM;
46. Obtener los nombres de los centros de trabajo si hay
alguno que est en la calle Atocha.
SELECT NOMCE FROM TCENTR
WHERE SENAS LIKE '%ATOCHA%';
47. Hallar los nombres de los empleados que no tienen
comisin, clasificados de manera que aparezcan primero
aquellos cuyos nombres son ms cortos (a igual longitud de
nombre se ordenar alfabticamente por nombre de
empleado).
SELECT NOMEM, LENGTH (NOMEM) LONGITUD
FROM TEMPLE
WHERE COMIS IS NULL
ORDER BY 2, 1;
SELECT NOMEM, LENGTH (NOMEM) LONGITUD
FROM TEMPLE
WHERE COMIS IS NULL
ORDER BY LENGTH(NOMEM), NOMEM;

SELECT SUBSTR(NOMEM, INSTR(NOMEM, ',') +2) || ' '


||
SUBSTR(NOMEM, 1, INSTR(NOMEM, ',') -1)
"Nombre Apellido"
FROM TEMPLE
ORDER BY 1;
51. Hallar por orden alfabtico los nombres de empleados
suprimiendo las tres ltimas letras de los nombres de pila,
para los empleados cuyos nombres de pila tengan ms de 6
letras.
SELECT SUBSTR (NOMEM, 1, LENGTH (NOMEM) - 3)
FROM TEMPLE
WHERE LENGTH(SUBSTR(NOMEM, INSTR(NOMEM, ',')
+2))>6
ORDER BY 1;
SELECT SUBSTR (NOMEM, 1, LENGTH (NOMEM) - 3)
FROM TEMPLE
WHERE NOMEM LIKE '%, _______%'
ORDER BY 1;
52. Obtener el nombre del empleado y el valor del cdigo
ASCII del segundo carcter de aqul cuyo nmero de
empleado es el 120.
SELECT NOMEM, ASCII ( SUBSTR (NOMEM, 2) )
FROM TEMPLE
WHERE NUMEM = 120;
53. Obtener la primera posicin de la letra A dentro de los
nombres de los empleados del departamento 100.
SELECT NOMEM, INSTR(NOMEM, 'A')
FROM TEMPLE
WHERE NUMDE = 100;
54. Cuente el nmero de filas de la tabla TEMPLE.
SELECT COUNT(*) "Filas de TEMPLE"
FROM TEMPLE;
55. Muestre todos los nombres de los empleados con su
nmero de fila (ROWNUM).
SELECT ROWNUM, NOMEM FROM TEMPLE;
56. Codificar una consulta SQL que devuelva
aproximadamente los nombres de la dcima parte de las
filas de la tabla de empleados.
SELECT NOMEM FROM TEMPLE
WHERE ROWNUM < (SELECT COUNT(*) FROM TEMPLE)/10;

57. Obtener la lista de los empleados (nmero de empleado


y comisiones que cobran) con salario mayor de 4.000 ;
especificar con valor 'No se sabe' si en alguna fila la
comisin tiene valor nulo.
SELECT NUMEM, NVL(TO_CHAR(COMIS), 'No se sabe')
FROM TEMPLE
WHERE SALAR > 4000;
58. Obtener por orden alfabtico los nombres, salarios y
nmero de hijos de los empleados que o bien no tienen
hijos y ganan ms de 2000 euros, o bien tienen hijos y
ganan menos de 3000 euros.
SELECT NOMEM, SALAR, NUMHI FROM TEMPLE
WHERE (NUMHI = 0 AND SALAR > 2000) OR
(NUMHI > 0 AND SALAR < 3000)
ORDER BY NOMEM;
59. Obtener los nombres, sueldos y fecha de incorporacin
de los empleados que hayan empezado a trabajar en la
empresa el ao 1988 o despus, por orden de fecha y por
orden alfabtico.
SELECT NOMEM, SALAR, FECIN
FROM TEMPLE
WHERE FECIN > '31/12/1987'
ORDER BY 3, 1;
SELECT NOMEM, SALAR, FECIN
FROM TEMPLE
WHERE TO_CHAR(FECIN,'YYYY') = '1988'
ORDER BY FECIN, NOMEM;
60. Obtener por orden alfabtico los nombres de los
empleados que empezaron a trabajar en la empresa en el
ao 66.
SELECT NOMEM FROM TEMPLE
WHERE TO_CHAR(FECIN,'YY') = '66'
ORDER BY NOMEM;
SELECT NOMEM FROM TEMPLE
WHERE FECIN BETWEEN '1/1/1966' AND '31/12/1966'
ORDER BY NOMEM;
SELECT NOMEM FROM TEMPLE
WHERE FECIN >='1/1/1966' AND FECIN <='31/12/1966'
ORDER BY NOMEM;
61. Obtener por orden alfabtico los nombres de los
empleados que han ingresado el 1/1/88 o en el da de hoy.
SELECT NOMEM FROM TEMPLE
WHERE FECIN IN ('1/1/1988', SYSDATE)
ORDER BY NOMEM;
SELECT NOMEM FROM TEMPLE
WHERE FECIN='1/1/1988' OR FECIN=SYSDATE
ORDER BY NOMEM;
62. Obtener los nombres de empleados, su fecha de
nacimiento y edad (en aos). El orden ser de ms a menos
edad, a igual nmero de aos por fecha de nacimiento y a
igual fecha orden alfabtico de los nombres.
SELECT NOMEM, FECNA,
TRUNC(MONTHS_BETWEEN(SYSDATE, FECNA)/12) EDAD
FROM TEMPLE
ORDER BY EDAD DESC, FECNA, NOMEM;
63. Obtener los nombres, salarios y fechas de ingreso de
los empleados que, o bien ingresaron despus de 1/1/1988,
o bien tienen un salarios inferior a 2000. Clasificarlos por
fecha y nombre.

SELECT NOMEM, SALAR, FECIN FROM TEMPLE


WHERE FECIN > '1/1/1988' OR SALAR < 2000
ORDER BY FECIN, NOMEM;
64. Obtener por orden alfabtico los nombres y salarios de
los empleados que o bien ingresaron despus del 1/1/88 o
bien antes y adems tienen un salario inferior al salario
ms bajo de los que ingresaron con posterioridad al 1/1/88
incrementado en un 100 %.
SELECT NOMEM, SALAR FROM TEMPLE
WHERE FECIN > '1/1/88' OR
(FECIN <= '1/1/1988'
AND SALAR < 2 * (SELECT MIN(SALAR) FROM TEMPLE
WHERE FECIN > '1/1/88') )
ORDER BY NOMEM;
SELECT NOMEM, SALAR FROM TEMPLE
WHERE FECIN > '1/1/88' OR
(FECIN <= '1/1/1988'
AND SALAR < ALL (SELECT SALAR * 2 FROM TEMPLE
WHERE FECIN > '1/1/88') )
ORDER BY NOMEM;
65. Supongamos que segn el convenio laboral de la
empresa, para los empleados con ms de un ao de
servicio el nmero de das de vacaciones anuales
expresado en das laborables es de 20 incrementados en
uno ms por cada tres aos de servicio cumplidos en el ao
anterior. Para los empleados que este ao cumplen 45 o
ms aos de edad y tienen ms de un ao de servicio,
hallar por orden alfabtico el nombre y el nmero de das
laborables de vacaciones anuales que corresponde a cada
uno. (Suponga que se est en la fecha 5/7/90)
SELECT NOMEM, 20 +
TRUNC( (TRUNC(MONTHS_BETWEEN('5/7/90', FECIN)/12) 1) / 3 ) DIAS
FROM TEMPLE
WHERE TRUNC(MONTHS_BETWEEN('5/7/90', FECNA)/12)
>= 45 AND
TRUNC(MONTHS_BETWEEN('5/7/90', FECIN)/12) > 1
ORDER BY NOMEM;
66. Se desea analizar un plan de jubilacin anticipada para
los empleados con 60 aos cumplidos en el que se ofrece
una paga adicional extra de jubilacin equivalente al salario
actual de un mes por cada ao de servicio cumplido. Hallar
una lista por orden alfabtico de los empleados que este
ao cumplen 60 o ms aos indicando para cada uno la
cuanta de esta paga extra.
(Suponga que se est en la fecha 5/7/90)
SELECT NOMEM, SALAR *
TRUNC(MONTHS_BETWEEN('5/7/90', FECIN)/12) "Paga
Extra"
FROM TEMPLE
WHERE 90 - TO_CHAR(FECNA, 'YY') >= 60
ORDER BY NOMEM;
67. Para los empleados de los departamentos 111 y 112
hallar por orden alfabtico: nombre, edad en aos
cumplidos en la fecha del da de hoy y edad que tenan
cuando ingresaron en la empresa.
(Suponga que se est en la fecha 5/7/90)
SELECT NOMEM, TRUNC(MONTHS_BETWEEN('5/7/90',
FECNA)/12) EDAD,
TRUNC(MONTHS_BETWEEN(FECIN, FECNA)/12) "Edad
ingreso"
FROM TEMPLE
WHERE NUMDE = 111 OR NUMDE = 112
ORDER BY NOMEM;
68. Para los empleados de los departamentos 110 y 111

hallar por orden alfabtico: nombre y tiempo que llevan en


la empresa en el da de hoy expresado en aos, meses y
das.
(Suponga que se est en la fecha 5/7/90)
http://ankurbhatia.wordpress.com/2007/03/07/calculatingyears-months-and-days-between-two-dates/
SELECT NOMEM, TRUNC(MONTHS_BETWEEN('5/7/90',
FECIN)/12) "Aos",
TRUNC( MOD(MONTHS_BETWEEN('5/7/90', FECIN),12) )
"Meses",
TO_DATE('5/7/90') ADD_MONTHS (FECIN, TRUNC
(MONTHS_BETWEEN ('5/7/90', FECIN )) ) "Das",
TO_DATE('5/7/90') - FECIN "Das Totales"
FROM TEMPLE
WHERE NUMDE = 110 OR NUMDE = 111
ORDER BY NOMEM;
69. Hallar para los empleados de los departamentos 110 y
112 su nombre, su da de cumpleaos con el mes en
nmeros romanos, por orden alfabtico decreciente.
(Repase formatos de mscaras de fechas para TO_CHAR)
SELECT NOMEM, FECNA, TO_CHAR (FECNA, 'DD') ||
' - ' || TO_CHAR(FECNA, 'RM') "Cumpleaos"
FROM TEMPLE
WHERE NUMDE = 110 OR NUMDE = 112
ORDER BY NOMEM DESC;
70. Hallar para todos los empleados en qu da de la
semana cay su fecha de nacimiento.
(Repase formatos de mscaras de fechas para TO_CHAR)
SELECT NOMEM, FECNA, TO_CHAR(FECNA, 'DAY')
FROM TEMPLE
ORDER BY 3;

71. Mostrar nmero y nombre de los empleados que han


ingresado posteriormente al ao 1970.
SELECT NUMEM, NOMEM FROM TEMPLE
WHERE FECIN > '31/12/1970'
ORDER BY NOMEM;
SELECT NUMEM, NOMEM FROM TEMPLE
WHERE TO_CHAR(FECIN, 'YYYY') >= '1971'
ORDER BY NOMEM;
72. Contar los empleados que han ingresado
posteriormente al ao 1970.
SELECT COUNT(*) FROM TEMPLE
WHERE FECIN > '31/12/1970';
SELECT COUNT(*) FROM TEMPLE
WHERE TO_CHAR(FECIN, 'YYYY') >= '1971';
73. Obtener los nombres y fechas de nacimiento de los
empleados del departamento 100, de ms viejo a ms
joven (la fecha estar formateada ejemplo: "03 de
diciembre de 1943")
SELECT NOMEM, TO_CHAR(FECNA, 'dd "de "fmmonth "de"
yyyy')
FROM TEMPLE
WHERE NUMDE=100
ORDER BY FECNA;
SELECT NOMEM, TO_CHAR(FECNA, 'dd "de "month "de"
yyyy')
FROM TEMPLE
WHERE NUMDE=100
ORDER BY FECNA;
74. Hallar el salario mximo y mnimo de los empleados del

departamento 100.
SELECT MAX(SALAR), MIN(SALAR)
FROM TEMPLE
WHERE NUMDE=100;
75. Hallar el nmero de empleados y de extensiones
telefnicas del departamento 112.
/* OjO al DISTINCT */
SELECT COUNT(*) EMPLEADOS, COUNT(DISTINCT EXTEL)
EXTENSIONES
FROM TEMPLE
WHERE NUMDE=112;
76. Hallar el nmero de empleados del departamento 112,
as como cuntas comisiones hay y la suma y media de sus
comisiones.
SELECT COUNT(*) EMPLEADOS, COUNT(COMIS)
COMISIONES, SUM(COMIS), AVG(COMIS)
FROM TEMPLE
WHERE NUMDE=112;
77. Hallar la media del nmero de hijos de los empleados
del departamento 121.
SELECT AVG(NUMHI) FROM TEMPLE
WHERE NUMDE=121;
78. Obtener el nmero de empleados de los departamentos
100 y 110.
SELECT COUNT(*) FROM TEMPLE
WHERE NUMDE=100 OR NUMDE=110;
SELECT COUNT(*) FROM TEMPLE
WHERE NUMDE IN (100, 110);
79. Hallar para cada departamento (por su nmero) el
salario medio. Ordenar el resultado de mayor a menor
salario medio.
SELECT NUMDE, AVG(SALAR) "Salario medio"
FROM TEMPLE
GROUP BY NUMDE
ORDER BY 2 DESC;
80. Obtener el nmero de empleados por departamento.
Ordene el resultado de mayor a menor nmero de
empleados y a igual nmero de empleados por orden
creciente de departamento.
SELECT NUMDE, COUNT(*) EMPLEADOS
FROM TEMPLE
GROUP BY NUMDE
ORDER BY EMPLEADOS DESC, NUMDE;
81. Calcule la media de hijos por departamento ordenado
por nmero de departamento.
SELECT NUMDE, AVG(NUMHI)
FROM TEMPLE
GROUP BY NUMDE
ORDER BY NUMDE;
82. Calcule la suma total y el mximo de hijos por
departamento ordenado por nmero de departamento.
SELECT NUMDE, SUM(NUMHI), MAX(NUMHI)
FROM TEMPLE
GROUP BY NUMDE
ORDER BY NUMDE;
83. Calcule el nmero de empleados que tienen el mismo
salario ordenados por salario decreciente.

SELECT SALAR, COUNT(*)


FROM TEMPLE
GROUP BY SALAR
ORDER BY SALAR DESC;
84. Calcule el nmero de empleados que tienen el mismo
salario ordenados por salario decreciente. Muestre
solamente aquellos salarios en los que haya ms de 1
empleado.
SELECT SALAR, COUNT(*)
FROM TEMPLE
GROUP BY SALAR
HAVING COUNT(*) > 1
ORDER BY SALAR DESC;
85. Calcule el nmero de empleados que tienen el mismo
salario ordenados por salario decreciente. Muestre
solamente aquellos salarios en los que haya ms de 1
empleado y que el salario sea mayor que 3000.
SELECT SALAR, COUNT(*)
FROM TEMPLE
WHERE SALAR > 3000
GROUP BY SALAR
HAVING COUNT(*) > 1
ORDER BY SALAR DESC;
86. Azucena Muoz recibi un prstamo para vivienda el
da en que ingres en la empresa con vencimientos anuales
a 180 das del da y mes de su ingreso. Hallar la fecha en
que vence la anualidad del prstamo correspondiente al
ao actual. (Suponga que se est en la fecha 5/7/90)
SELECT FECIN, FECIN + 180 "Primer Venc.",
ADD_MONTHS(FECIN, 12*(1990-TO_CHAR(FECIN,
'YYYY'))) + 180 "Venc. ao actual"
FROM TEMPLE
WHERE NOMEM = 'MUOZ, AZUCENA';
SELECT FECIN, FECIN + 180 "Primer Venc.",
TO_DATE (to_char(FECIN+180, 'DD/MM')||'/1991')
"Venc. ao actual"
FROM TEMPLE
WHERE NOMEM = 'MUOZ, AZUCENA';
87. Todos los empleados tienen un perodo de 6 meses
despus de su ingreso antes de firmar su contrato de
empleo definitivo. Hallar para los empleados que este ao
cumplen menos de 40 aos de edad, por orden alfabtico:
nombre y fecha de firma de su contrato definitivo.
(Suponga que se est en la fecha 5/7/90)
SELECT NOMEM, FECIN, ADD_MONTHS(FECIN, 6)
"Contrato definitivo",
TRUNC(MONTHS_BETWEEN('5/7/90', FECNA)/12) EDAD
FROM TEMPLE
WHERE TRUNC(MONTHS_BETWEEN('5/7/90', FECNA)/12)<
40
ORDER BY NOMEM;
88. Claudita Fierro (numem 420) y Horaciete Torres (numem
490) tras un volcnico y fugaz noviazgo han decidido unirse
eternamente en matrimonio mientras no se divorcien. La
boda se celebrar dentro de 2 das, y tomarn 20 das de
vacaciones para el viaje de novios. La empresa le entregar
a cada uno como regalo de boda un 1 % de su salario
actual por cada ao de servicio. Hallar: la fecha de la boda,
la fecha en que se incorporarn al trabajo despus del viaje
de novios y el regalo de boda correspondiente a cada uno
de ellos.
(Suponga que se est en la fecha 31/12/1989)
SELECT NOMEM, TO_DATE('31/12/1989','DD/MM/YYYY')
+ 2 AS BODA,
TO_DATE('31/12/1989','DD/MM/YYYY') + 23 AS
FIN,

SALAR * 0.01 *
MONTHS_BETWEEN(TO_DATE('31/12/1989','DD/MM/YYYY')
+ 2, FECIN)/12 AS REGALO
FROM TEMPLE
WHERE NUMEM = 420 OR NUMEM = 490;
/* Si el regalo fuera solamente por aos completos
*/
SELECT NOMEM, TO_DATE('31/12/1989','DD/MM/YYYY')
+ 2 AS BODA,
TO_DATE('31/12/1989','DD/MM/YYYY') + 23 AS
FIN,
SALAR * 0.01 * TRUNC
(MONTHS_BETWEEN(TO_DATE('31/12/1989','DD/MM/YYYY')
+ 2, FECIN)/12) AS REGALO
FROM TEMPLE
WHERE NUMEM = 420 OR NUMEM = 490;
89. En qu da del ao (nmero de orden) y en qu da de
la semana entr en la empresa el empleado que se llama
Aureo?
SELECT FECIN, TO_CHAR(FECIN, 'DDD'),
TO_CHAR(FECIN, 'DAY')
FROM TEMPLE
WHERE NOMEM LIKE '%AUREO';
90. Hallar cuntos departamentos hay y el presupuesto
anual medio de ellos. (PRESU est almacenado en miles de
euros)
SELECT COUNT(*) DEPARTAMENTOS, AVG(PRESU) * 1000
"P. Anual"
FROM TDEPTO;
91. Como la pregunta anterior, pero para los
departamentos que no tienen director en propiedad.
SELECT COUNT(*) DEPARTAMENTOS, AVG(PRESU) * 1000
"P. Anual"
FROM TDEPTO
WHERE TIDIR <>'P';
92. Para los departamentos 111 y 112 hallar la media de
los aos de servicio de sus empleados en el da de hoy.
(Suponga que se est en la fecha 5/7/90)
SELECT AVG (MONTHS_BETWEEN('5/7/90', FECIN)/12)
FROM TEMPLE
WHERE NUMDE = 111 OR NUMDE = 112;
/* Si solamente se contabilizan aos de servicio
completos */
SELECT AVG ( TRUNC(MONTHS_BETWEEN('5/7/90',
FECIN)/12) )
FROM TEMPLE
WHERE NUMDE = 111 OR NUMDE = 112;
SELECT AVG ( TRUNC( (TO_DATE('5/7/90') FECIN)/365 ) )
FROM TEMPLE
WHERE NUMDE = 111 OR NUMDE = 112;
93. Para los departamentos 111 y 112 hallar la media de
los aos de servicio de sus empleados el da 31/12/86.
SELECT AVG (MONTHS_BETWEEN('31/12/86', FECIN)/12)
FROM TEMPLE
WHERE (NUMDE = 111 OR NUMDE = 112) AND
FECIN < '31/12/86';
94. Para los empleados que han ingresado en la empresa
en los ltimos 5 aos, hallar la edad media en aos
cumplidos de la edad a la que han ingresado. (Suponga que
se est en la fecha 5/7/90)
SELECT

AVG ( TRUNC( MONTHS_BETWEEN(FECIN,

FECNA)/12 ) )
FROM TEMPLE
WHERE FECIN BETWEEN add_months( to_date('5/7/90'),
-12*5 ) AND '5/7/90';

SELECT AVG ( TRUNC( MONTHS_BETWEEN(FECIN,


FECNA)/12 ) )
FROM TEMPLE
WHERE FECIN >= add_months( to_date('5/7/90'),
-12*5 ) AND FECIN <='5/7/90';
95. Hallar la masa salarial anual (salario ms comisin) de
la empresa (se suponen 14 pagas anuales).
SELECT (SUM (SALAR) + SUM (COMIS)) * 14
FROM TEMPLE;
/* OjO la siguiente consulta falla por los nulos
de COMIS */
SELECT SUM (SALAR + COMIS) * 14
FROM TEMPLE;
/* Usando NVL s sera correcto */
SELECT SUM (SALAR + NVL(COMIS,0)) * 14
FROM TEMPLE;
96. Hallar cuntos empleados han ingresado en el ao
actual. (Suponga que se est en la fecha 8/7/88)
SELECT COUNT(*)
FROM TEMPLE
WHERE FECIN >= '1/1/1988';
SELECT COUNT(*)
FROM TEMPLE
WHERE TO_CHAR(FECIN, 'YY') = '88';
97. Hallar el salario medio de los empleados cuyo salario no
supera en ms de 20 % al salario mnimo de los empleados
que tienen algn hijo y su salario por hijo es mayor que
1000 euros.
SELECT AVG(SALAR)
FROM TEMPLE
WHERE SALAR <= (SELECT 1.20 * MIN(SALAR)
FROM TEMPLE
WHERE NUMHI <> 0 AND
SALAR > NUMHI * 1000);
98. Hallar la diferencia entre el salario ms alto y el ms
bajo (sin tener en cuenta las comisiones).
SELECT MAX(SALAR) - MIN(SALAR)
FROM TEMPLE;
99. Hallar la diferencia entre el salario ms alto y el ms
bajo (incluidas las comisiones).
SELECT MAX(SALAR + NVL(COMIS,0)) - MIN(SALAR +
NVL(COMIS,0))
FROM TEMPLE;
100. Hallar la edad media en aos cumplidos en el da de
hoy de los empleados que tienen ms de 2 hijos. (Suponga
que se est en la fecha 8/7/90)
SELECT AVG( TRUNC( MONTHS_BETWEEN('8/7/90',
FECNA)/12 ) )
FROM TEMPLE
WHERE NUMHI > 2;
SELECT AVG( TRUNC ( (TO_DATE('8/7/90') FECNA)/365) )
FROM TEMPLE
WHERE NUMHI > 2;

101. 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);
102. Hallar el nmero medio de hijos por empleado para
todos los empleados que no tienen ms de dos hijos.
SELECT AVG (NUMHI)
FROM TEMPLE
WHERE NUMHI <= 2;
103. Hallar el salario medio y la edad media en aos para
cada grupo de empleados con igual comisin y para los que
no la tengan. (Suponga que se est en la fecha 5/7/90)
SELECT COMIS, AVG(SALAR),
AVG( TRUNC( MONTHS_BETWEEN('5/7/90',
FECNA)/12 ) ) "Edad media"
FROM TEMPLE
GROUP BY COMIS
ORDER BY COMIS;
SELECT COMIS, AVG(SALAR),
AVG( TRUNC ( (TO_DATE('5/7/90') FECNA)/365) ) "Edad media"
FROM TEMPLE
GROUP BY COMIS
ORDER BY COMIS;
104. Para los departamentos en los que hay algn
empleado cuyo salario sea mayor que 4000 euros al mes
hallar el nmero de empleados y la suma de sus salarios,
comisiones y nmero de hijos.
SELECT NUMDE, COUNT(*), SUM(SALAR), SUM(COMIS),
SUM(NUMHI)
FROM TEMPLE
WHERE NUMDE IN (SELECT DISTINCT NUMDE FROM TEMPLE
WHERE SALAR > 4000)
GROUP BY NUMDE
ORDER BY NUMDE;
SELECT NUMDE, COUNT(*), SUM(SALAR), SUM(COMIS),
SUM(NUMHI)
FROM TEMPLE
GROUP BY NUMDE
HAVING NUMDE IN (SELECT DISTINCT NUMDE FROM TEMPLE
WHERE SALAR > 4000)
ORDER BY NUMDE;
105. Para los departamentos en los que la antigedad
media de sus empleados supera a la de la empresa
(antigedad media de todos los empleados), hallar el
salario mnimo, el medio y el mximo. (Suponga que se
est en la fecha 5/7/90)
SELECT NUMDE, MIN(SALAR), AVG(SALAR), MAX(SALAR)
FROM TEMPLE
GROUP BY NUMDE
HAVING AVG(to_date('5/7/90') - FECIN) >
(SELECT AVG(to_date('5/7/90') - FECIN)
FROM TEMPLE)
ORDER BY NUMDE;
106. Agrupando por nmero de hijos, hallar la media del
salario, media de la comisin contando todos los
empleados y media de la comisin de los que la tienen.
SELECT NUMHI, AVG(SALAR), AVG(NVL(COMIS,0)),
AVG(COMIS)
FROM TEMPLE
GROUP BY NUMHI
ORDER BY NUMHI;

/* Para comprender la consulta anterior extraiga


conclusiones con la siguiente consulta */
SELECT NUMHI, AVG(COMIS), SUM(COMIS),
COUNT(COMIS), COUNT(*)
FROM TEMPLE
GROUP BY NUMHI
ORDER BY NUMHI;
107. Agrupando por nmero de hijos, hallar la media del
salario y la media del salario total (salario ms comisin).
SELECT NUMHI, AVG(SALAR), AVG(SALAR+NVL(COMIS,0))
TOTAL
FROM TEMPLE
GROUP BY NUMHI
ORDER BY NUMHI;
108. Para aquellos empleados con hijos, muestre
agrupando por nmero de hijos, la media del salario total
(salario ms comisin) y la media del salario total por cada
hijo.
SELECT NUMHI, AVG(SALAR+NVL(COMIS,0)) TOTAL,
AVG(SALAR+NVL(COMIS,0))/NUMHI "Total x Hijo"
FROM TEMPLE
WHERE NUMHI >0
GROUP BY NUMHI
ORDER BY NUMHI;
SELECT NUMHI, AVG(SALAR+NVL(COMIS,0)) TOTAL,
AVG(SALAR+NVL(COMIS,0))/NUMHI "Total x Hijo"
FROM TEMPLE
GROUP BY NUMHI
HAVING NUMHI > 0
ORDER BY NUMHI;
109. Para cada departamento, hallar la media de la
comisin con respecto a los empleados que la reciben y con
respecto al total de empleados.
SELECT NUMDE, AVG(COMIS), AVG(NVL(COMIS,0))
FROM TEMPLE
GROUP BY NUMDE
ORDER BY NUMDE;
SELECT NUMDE, AVG(COMIS), SUM (COMIS)/COUNT(*)
FROM TEMPLE
GROUP BY NUMDE
ORDER BY NUMDE;
110. Para cada extensin telefnica hallar cuntos
empleados la usan y el salario medio de stos.
SELECT EXTEL, COUNT(*), AVG(SALAR)
FROM TEMPLE
GROUP BY EXTEL
ORDER BY EXTEL;
111. Para cada extensin telefnica hallar cuntos
empleados la usan y el salario medio de stos. Solamente
se mostrarn aquellas extensiones telefnicas que sean
utilizadas por ms de 2 empleados.
SELECT EXTEL, COUNT(*), AVG(SALAR)
FROM TEMPLE
GROUP BY EXTEL
HAVING COUNT(*) >2
ORDER BY EXTEL;
SELECT EXTEL, COUNT(*), AVG(SALAR)
FROM TEMPLE
GROUP BY EXTEL
HAVING COUNT(*) >=3
ORDER BY EXTEL;
112. Para cada extensin telefnica y cada departamento

hallar cuntos empleados la usan y el salario medio de


stos.
SELECT EXTEL, NUMDE, COUNT(*), AVG(SALAR)
FROM TEMPLE
GROUP BY NUMDE, EXTEL
ORDER BY EXTEL, NUMDE;
113. Para cada extensin telefnica y cada departamento
hallar cuntos empleados la usan y el salario medio de
stos. Solamente se mostrarn aquellos casos donde hayan
2 o ms empleados.
SELECT EXTEL, NUMDE, COUNT(*), AVG(SALAR)
FROM TEMPLE
GROUP BY NUMDE, EXTEL
HAVING COUNT(*) >=2
ORDER BY EXTEL, NUMDE;
114. Hallar los nmeros de extensin telefnica mayores de
los diversos departamentos ordenados de mayor a menor
extensin telefnica.
SELECT NUMDE, MAX(EXTEL)
FROM TEMPLE
GROUP BY NUMDE
ORDER BY 2 DESC;
115. Para cada extensin telefnica hallar el nmero de
departamentos a los que sirve.
SELECT EXTEL, COUNT(DISTINCT NUMDE)
FROM TEMPLE
GROUP BY EXTEL
ORDER BY EXTEL;
/* OjO las dos consultas siguientes obtienen el
nmero de empleados que usan cada extensin
telefnica */
SELECT EXTEL, COUNT(NUMDE)
FROM TEMPLE
GROUP BY EXTEL
ORDER BY EXTEL;
SELECT EXTEL, COUNT(*)
FROM TEMPLE
GROUP BY EXTEL
ORDER BY EXTEL;
116. Para cada departamento, hallar cuntos empleados
hay en promedio por cada extensin telefnica.
SELECT NUMDE, COUNT(*)/COUNT (DISTINCT EXTEL)
"Empleados por tfno."
FROM TEMPLE
GROUP BY NUMDE
ORDER BY NUMDE;
117. Para los empleados que tienen comisin, hallar para
los departamentos cuntos empleados hay en promedio
por cada extensin telefnica.
SELECT NUMDE, COUNT(*)/COUNT (DISTINCT EXTEL)
"Empleados por tfno."
FROM TEMPLE
WHERE COMIS IS NOT NULL
GROUP BY NUMDE
ORDER BY NUMDE;
118. Para los departamentos en los que algn empleado
tiene comisin, hallar cuntos empleados hay en promedio
por cada extensin telefnica.
SELECT NUMDE, COUNT(*)/COUNT (DISTINCT EXTEL)
"Empleados por tfno."
FROM TEMPLE
WHERE NUMDE IN (SELECT DISTINCT NUMDE FROM TEMPLE

WHERE COMIS IS NOT NULL)


GROUP BY NUMDE
ORDER BY NUMDE;
SELECT NUMDE, COUNT(*)/COUNT (DISTINCT EXTEL)
"Empleados por tfno."
FROM TEMPLE
GROUP BY NUMDE
HAVING NUMDE IN (SELECT DISTINCT NUMDE FROM TEMPLE
WHERE COMIS IS NOT NULL)
ORDER BY NUMDE;
119. Obtener por orden creciente de departamento el
nmero de extensiones telefnicas diferentes de los
departamentos que tienen ms de tres.
/* OjO sin el DISTINCT calcula el nmero de
empleados por departamento */
SELECT NUMDE, COUNT(DISTINCT EXTEL) "Nm. ext."
FROM TEMPLE
GROUP BY NUMDE
HAVING COUNT (DISTINCT EXTEL) > 3
ORDER BY NUMDE;

SELECT NOMDE, DECODE(TIDIR, 'P', 'Propiedad', 'F',


'Funciones') DIRECTOR
FROM TDEPTO
ORDER BY NOMDE;
123. Hallar la suma de los presupuestos, los presupuestos
medios de los departamentos segn estn dirigidos en
propiedad o en funciones. Tambin se debe mostrar el
nmero de departamentos dirigidos en propiedad o en
funciones.
SELECT DECODE(TIDIR, 'P', 'Propiedad', 'F',
'Funciones') DIRECTOR,
AVG(PRESU) MEDIA, SUM(PRESU) SUMA,
COUNT(TIDIR)
FROM TDEPTO
GROUP BY TIDIR
ORDER BY 1;
124. Hallar el mximo valor de la suma de los salarios de
los departamentos (sin mostrar el nmero del
departamento).

120. Obtener por orden creciente las extensiones


telefnicas que son compartidas por menos de 4
empleados, excluyendo las que no son compartidas.

SELECT MAX(SUM(SALAR))
FROM TEMPLE
GROUP BY NUMDE;

SELECT EXTEL, COUNT(*) "Empleados" FROM TEMPLE


GROUP BY EXTEL
HAVING COUNT(*) BETWEEN 2 AND 3
ORDER BY EXTEL;

125. Hallar el mximo valor de la suma de los salarios de


los departamentos mostrando el nmero del departamento.

SELECT EXTEL, COUNT(*) "Empleados" FROM TEMPLE


GROUP BY EXTEL
HAVING COUNT(*)<4 AND COUNT(*) >1
ORDER BY EXTEL;
121. Obtener por orden creciente los nmeros de
extensiones telefnicas de los departamentos que tienen
ms de tres 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) > 3)
GROUP BY EXTEL
HAVING COUNT(*) BETWEEN 2 AND 3
ORDER BY EXTEL;
122. Muestre el nombre de cada departamento ordenado
alfabticamente junto con una columna que diga si el
departamento esta dirigido en "Propiedad" si TIDIR es 'P' y
en "Funciones" si TIDIR es 'F'.

/* OjO esto es errneo:


SQL> SELECT numde, MAX(SUM(SALAR))
2 FROM TEMPLE
3 GROUP BY NUMDE;
SELECT numde, MAX(SUM(SALAR))
*
ERROR en lnea 1:
ORA-00937: la funcin de grupo no es de grupo
nico
*/
SELECT NUMDE, SUM(SALAR) FROM TEMPLE
GROUP BY NUMDE
HAVING SUM(SALAR) = (SELECT MAX(SUM(SALAR))
FROM TEMPLE GROUP BY NUMDE);
SELECT NUMDE, SUM(SALAR) FROM TEMPLE
GROUP BY NUMDE
HAVING SUM(SALAR) >= ALL (SELECT SUM(SALAR)
FROM TEMPLE GROUP BY
NUMDE);

S-ar putea să vă placă și