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 alfabético.
SELECT NOMEM, NUMEM, EXTEL FROM TEMPLE WHERE NUMDE = 121 ORDER BY NOMEM; 13. Obtener por orden decreciente una relación de todos los números de extensiones telefónicas de los empleados.
SELECT NOMCE FROM TCENTR ORDER BY NOMCE; 3. Mostrar los datos de la tabla TCENTR ordenados descendentemente por su número 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 más de tres hijos por orden alfabético. SELECT NOMEM, SALAR FROM TEMPLE WHERE NUMHI > 3 ORDER BY 1; 7. Obtener la comisión, departamento y nombre, de los empleados cuyo salario es inferior a 1900€, clasificándolos por departamento en orden creciente, y por comisión 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 alfabético 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 números 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 comisión es NULL deberá mostrarse como 0). SELECT DISTINCT NVL(COMIS,0) FROM TEMPLE WHERE NUMDE = 110; 11. Hallar por orden alfabético 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 listín telefónico de los empleados del departamento 121 incluyendo nombre de empleado, número de empleado y extensión telefónica. Por orden alfabético.
SELECT DISTINCT EXTEL FROM TEMPLE ORDER BY EXTEL DESC; 14. Hallar la comisión, nombre y salario de los empleados con dos o más hijos, clasificados por comisión, y dentro de comisión por orden alfabético. 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 alfabético 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 sesión 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 número de filas de la tabla.
17. Hallar las diferentes combinaciones de valores de comisión y salario en el departamento 111, por orden de comisión 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 comisión es superior o igual al 50 % de su salario, por orden alfabético. SELECT NOMEM, COMIS, SALAR FROM TEMPLE WHERE COMIS >= 0.5*SALAR ORDER BY NOMEM; 20. Obtener una relación por orden alfabético 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 más hijos una paga extra de 100 euros por cada hijo (a partir del tercero inclusive). Muestre por orden alfabético 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 alfabético 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 próximos tres años el coste de vida va a aumentar un 6 % anual y que se suben los salarios en la misma proporción, hallar para los empleados con más de 4 hijos su nombre y su sueldo anual, actual y para cada uno de los próximos tres años, clasificados por orden alfabético. SELECT NOMEM, SALAR * 12 ACTUAL, SALAR * 12 * 1.06 "AÑO 1", SALAR * 12 * 1.06 * 1.06 "AÑO 2", SALAR * 12 * 1.06 * 1.06 * 1.06 "AÑO 3" FROM TEMPLE WHERE NUMHI > 4 ORDER BY NOMEM; 24. Hallar por orden alfabético los nombres de los empleados tales que si se les da una gratificación de 1000 euros por hijo, el total de esta gratificacón no supera a la décima 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 más comisión), por orden de salario total decreciente, y por orden alfabético dentro de salario total. (preste atención si la comisión fuera nula) SELECT NOMEM, SALAR + NVL(COMIS,0) Total FROM TEMPLE WHERE NUMDE = 112 ORDER BY 2 DESC, NOMEM; 26. Hallar por orden de número de empleado el nombre y salario total (salario más comisión) 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 números de los departamentos en los que haya algún empleado cuya comisión 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 comisión obtener por orden alfabético el nombre y el cociente entre su salario y el número de hijos (evite la división 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 día de su onomástica. Hallar por orden alfabético los nombres y cuantía de los regalos en euros para los que celebren su santo el día 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 número de empleado el nombre y salario total (salario más comisión) de los empleados cuyo salario total supera al salario mínimo 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 alfabético los nombres de los empleados cuyos sueldos igualan o superan al de Claudia Fierro en más 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 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 su salario.
sus salarios mensuales totales (Salario + comisión) y calcular el porcentaje que de su salario mesnsual total supone la comisión (redondeo con 2 decimales). Ordenar el resultado alfabéticamente 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 espectáculo para los hijos de los empleados, que se representará en dos días diferentes. El primer día asistirán los empleados cuyo apellido empiece por las letras desde A hasta L, ambas inclusive. El segundo día se cursarán invitaciones para el resto. A cada empleado se le asignarán tantas invitaciones gratuitas como hijos tenga y dos más. Además en la fiesta se entregará a cada empleado un obsequio por hijo. Obtener una lista por orden alfabético de los nombres a quienes hay que invitar el primer día de la representación, incluyendo también cuántas invitaciones corresponden a cada nombre y cuántos regalos hay que preparar para él. (Obsérvese que si dos empleados están casados, esta consulta calculará dos veces el número 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 alfabético 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 alfabético 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 ningún 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 comisión, hallar
38. 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 > (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 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 *(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; /* También ANY en lugar de SOME */ 40. 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 = SOME (SELECT COMIS FROM TEMPLE) ORDER BY NOMEM; 41. Obtener por orden alfabético inverso los nombres y salarios de los empleados cuyo salario es inferior a la comisión más 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 alfabético decreciente 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 < (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 cláusula WHERE COMIS IS NOT NULL. La siguiente consulta */ /* no devuelve ninguna fila porque ningún salario es menor que NULL */
SELECT NOMEM, LENGTH (NOMEM) LONGITUD FROM TEMPLE WHERE COMIS IS NULL ORDER BY LONGITUD, 1; 48. Hallar por orden alfabético 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 alfabético los nombres de los empleados cuyo salario está entre 2500 y 3000 €.
49. Hallar por orden alfabético 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 alfabético el nombre de pila y apellido de todos los empleados (en una sola columna).
44. Obtener por orden alfabético los nombres y salarios de los empleados cuyo salario dividido por su número de hijos cumpla una, o ambas, de las dos condiciones siguientes: - que sea inferior a 1200 euros - que sea superior al doble de su comisión Se tendrán en cuenta solamente los empleados con hijos cuya comisión 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 alfabético 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 comisión, clasificados de manera que aparezcan primero aquellos cuyos nombres son más cortos (a igual longitud de nombre se ordenará alfabéticamente 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 alfabético los nombres de empleados suprimiendo las tres últimas letras de los nombres de pila, para los empleados cuyos nombres de pila tengan más 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 código ASCII del segundo carácter de aquél cuyo número de empleado es el 120. SELECT NOMEM, ASCII ( SUBSTR (NOMEM, 2) ) FROM TEMPLE WHERE NUMEM = 120; 53. Obtener la primera posición 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 número de filas de la tabla TEMPLE. SELECT COUNT(*) "Filas de TEMPLE" FROM TEMPLE; 55. Muestre todos los nombres de los empleados con su número de fila (ROWNUM). SELECT ROWNUM, NOMEM FROM TEMPLE; 56. Codificar una consulta SQL que devuelva aproximadamente los nombres de la décima 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 (número de empleado y comisiones que cobran) con salario mayor de 4.000 €; especificar con valor 'No se sabe' si en alguna fila la comisión tiene valor nulo. SELECT NUMEM, NVL(TO_CHAR(COMIS), 'No se sabe') FROM TEMPLE WHERE SALAR > 4000; 58. Obtener por orden alfabético los nombres, salarios y número de hijos de los empleados que o bien no tienen hijos y ganan más 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 incorporación de los empleados que hayan empezado a trabajar en la empresa el año 1988 o después, por orden de fecha y por orden alfabético. 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 alfabético los nombres de los empleados que empezaron a trabajar en la empresa en el año 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 alfabético los nombres de los empleados que han ingresado el 1/1/88 o en el día 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 años). El orden será de más a menos edad, a igual número de años por fecha de nacimiento y a igual fecha orden alfabético 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 después 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 alfabético los nombres y salarios de los empleados que o bien ingresaron después del 1/1/88 o bien antes y además tienen un salario inferior al salario más 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 según el convenio laboral de la empresa, para los empleados con más de un año de servicio el número de días de vacaciones anuales expresado en días laborables es de 20 incrementados en uno más por cada tres años de servicio cumplidos en el año anterior. Para los empleados que este año cumplen 45 o más años de edad y tienen más de un año de servicio, hallar por orden alfabético el nombre y el número de días 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 jubilación anticipada para los empleados con 60 años cumplidos en el que se ofrece una paga adicional extra de jubilación equivalente al salario actual de un mes por cada año de servicio cumplido. Hallar una lista por orden alfabético de los empleados que este año cumplen 60 o más años indicando para cada uno la cuantía 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 alfabético: nombre, edad en años cumplidos en la fecha del día de hoy y edad que tenían 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 alfabético: nombre y tiempo que llevan en la empresa en el día de hoy expresado en años, meses y días. (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) "Años", 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 )) ) "Días", TO_DATE('5/7/90') - FECIN "Días 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 día de cumpleaños con el mes en números romanos, por orden alfabético decreciente. (Repase formatos de máscaras de fechas para TO_CHAR) SELECT NOMEM, FECNA, TO_CHAR (FECNA, 'DD') || ' - ' || TO_CHAR(FECNA, 'RM') "Cumpleaños" FROM TEMPLE WHERE NUMDE = 110 OR NUMDE = 112 ORDER BY NOMEM DESC; 70. Hallar para todos los empleados en qué día de la semana cayó su fecha de nacimiento. (Repase formatos de máscaras de fechas para TO_CHAR) SELECT NOMEM, FECNA, TO_CHAR(FECNA, 'DAY') FROM TEMPLE ORDER BY 3;
71. Mostrar número y nombre de los empleados que han ingresado posteriormente al año 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 año 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 más viejo a más 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 máximo y mínimo de los empleados del
departamento 100. SELECT MAX(SALAR), MIN(SALAR) FROM TEMPLE WHERE NUMDE=100; 75. Hallar el número de empleados y de extensiones telefónicas del departamento 112. /* OjO al DISTINCT */ SELECT COUNT(*) EMPLEADOS, COUNT(DISTINCT EXTEL) EXTENSIONES FROM TEMPLE WHERE NUMDE=112; 76. Hallar el número de empleados del departamento 112, así como cuántas 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 número de hijos de los empleados del departamento 121. SELECT AVG(NUMHI) FROM TEMPLE WHERE NUMDE=121; 78. Obtener el número 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 número) 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 número de empleados por departamento. Ordene el resultado de mayor a menor número de empleados y a igual número 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 número de departamento. SELECT NUMDE, AVG(NUMHI) FROM TEMPLE GROUP BY NUMDE ORDER BY NUMDE; 82. Calcule la suma total y el máximo de hijos por departamento ordenado por número de departamento. SELECT NUMDE, SUM(NUMHI), MAX(NUMHI) FROM TEMPLE GROUP BY NUMDE ORDER BY NUMDE; 83. Calcule el número 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 número de empleados que tienen el mismo salario ordenados por salario decreciente. Muestre solamente aquellos salarios en los que haya más de 1 empleado. SELECT SALAR, COUNT(*) FROM TEMPLE GROUP BY SALAR HAVING COUNT(*) > 1 ORDER BY SALAR DESC; 85. Calcule el número de empleados que tienen el mismo salario ordenados por salario decreciente. Muestre solamente aquellos salarios en los que haya más 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 Muñoz recibió un préstamo para vivienda el día en que ingresó en la empresa con vencimientos anuales a 180 días del día y mes de su ingreso. Hallar la fecha en que vence la anualidad del préstamo correspondiente al año 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. año actual" FROM TEMPLE WHERE NOMEM = 'MUÑOZ, AZUCENA'; SELECT FECIN, FECIN + 180 "Primer Venc.", TO_DATE (to_char(FECIN+180, 'DD/MM')||'/1991') "Venc. año actual" FROM TEMPLE WHERE NOMEM = 'MUÑOZ, AZUCENA'; 87. Todos los empleados tienen un período de 6 meses después de su ingreso antes de firmar su contrato de empleo definitivo. Hallar para los empleados que este año cumplen menos de 40 años de edad, por orden alfabético: 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 volcánico y fugaz noviazgo han decidido unirse eternamente en matrimonio mientras no se divorcien. La boda se celebrará dentro de 2 días, y tomarán 20 días 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 año de servicio. Hallar: la fecha de la boda, la fecha en que se incorporarán al trabajo después 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 años 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é día del año (número de orden) y en qué día 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 cuántos 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 años de servicio de sus empleados en el día 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 años 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 años de servicio de sus empleados el día 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 años, hallar la edad media en años 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 más comisión) 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í sería correcto */ SELECT SUM (SALAR + NVL(COMIS,0)) * 14 FROM TEMPLE; 96. Hallar cuántos empleados han ingresado en el año 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 más de 20 % al salario mínimo de los empleados que tienen algún 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 más alto y el más bajo (sin tener en cuenta las comisiones). SELECT MAX(SALAR) - MIN(SALAR) FROM TEMPLE; 99. Hallar la diferencia entre el salario más alto y el más bajo (incluidas las comisiones). SELECT MAX(SALAR + NVL(COMIS,0)) - MIN(SALAR + NVL(COMIS,0)) FROM TEMPLE; 100. Hallar la edad media en años cumplidos en el día de hoy de los empleados que tienen más 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 número medio de hijos por empleado para todos los empleados que no tienen más de dos hijos. SELECT AVG (NUMHI) FROM TEMPLE WHERE NUMHI <= 2; 103. Hallar el salario medio y la edad media en años para cada grupo de empleados con igual comisión 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 algún empleado cuyo salario sea mayor que 4000 euros 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 > 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 antigüedad media de sus empleados supera a la de la empresa (antigüedad media de todos los empleados), hallar el salario mínimo, el medio y el máximo. (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 número de hijos, hallar la media del salario, media de la comisión contando todos los empleados y media de la comisión 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 número de hijos, hallar la media del salario y la media del salario total (salario más comisión). 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 número de hijos, la media del salario total (salario más comisión) 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 comisión 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 extensión telefónica hallar cuántos 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 extensión telefónica hallar cuántos empleados la usan y el salario medio de éstos. Solamente se mostrarán aquellas extensiones telefónicas que sean utilizadas por más 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 extensión telefónica y cada departamento
hallar cuántos 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 extensión telefónica y cada departamento hallar cuántos empleados la usan y el salario medio de éstos. Solamente se mostrarán aquellos casos donde hayan 2 o más empleados. SELECT EXTEL, NUMDE, COUNT(*), AVG(SALAR) FROM TEMPLE GROUP BY NUMDE, EXTEL HAVING COUNT(*) >=2 ORDER BY EXTEL, NUMDE; 114. Hallar los números de extensión telefónica mayores de los diversos departamentos ordenados de mayor a menor extensión telefónica. SELECT NUMDE, MAX(EXTEL) FROM TEMPLE GROUP BY NUMDE ORDER BY 2 DESC; 115. Para cada extensión telefónica hallar el número 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 número de empleados que usan cada extensión telefónica */ 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 cuántos empleados hay en promedio por cada extensión telefónica. SELECT NUMDE, COUNT(*)/COUNT (DISTINCT EXTEL) "Empleados por tfno." FROM TEMPLE GROUP BY NUMDE ORDER BY NUMDE; 117. Para los empleados que tienen comisión, hallar para los departamentos cuántos empleados hay en promedio por cada extensión telefónica. 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 algún empleado tiene comisión, hallar cuántos empleados hay en promedio por cada extensión telefónica. 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 número de extensiones telefónicas diferentes de los departamentos que tienen más de tres. /* OjO sin el DISTINCT calcula el número de empleados por departamento */ SELECT NUMDE, COUNT(DISTINCT EXTEL) "Núm. 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 según estén dirigidos en propiedad o en funciones. También se debe mostrar el número 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 máximo valor de la suma de los salarios de los departamentos (sin mostrar el número del departamento).
120. Obtener por orden creciente las extensiones telefónicas 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 máximo valor de la suma de los salarios de los departamentos mostrando el número 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 números de extensiones telefónicas de los departamentos que tienen más 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 alfabéticamente 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 erróneo: SQL> SELECT numde, MAX(SUM(SALAR)) 2 FROM TEMPLE 3 GROUP BY NUMDE; SELECT numde, MAX(SUM(SALAR)) * ERROR en línea 1: ORA-00937: la función 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);