8
 ASIGNATURA: FUNDAMENTOS DE BASE DE DATOS PROFESOR: ING. LUIS CAMPOS ORREGO TEMA: CONSULTAS EN SQL ALUMNO: FALLA MUÑOZ LUIS ENRIQUE Lambayeque, Octubre del 2014 

CONSULTAS trabajo final sql.docx

Embed Size (px)

Citation preview

ASIGNATURA: FUNDAMENTOS DE BASE DE DATOS

PROFESOR: ING. LUIS CAMPOS ORREGOTEMA: CONSULTAS EN SQLALUMNO: FALLA MUOZ LUIS ENRIQUE

Lambayeque, Octubre del 2014

TALLER SQL

CONSULTAS

1. Hallar por orden alfabtico los nombres de los departamentos cuyo director lo es en funciones y no en propiedad.

Solucin:

SELECT NOMDEFROM TDEPTOWHERE TIDIR = 'F'ORDER BY NOMDE

2. Obtener por orden creciente una relacin de todos los nmeros DISTINTOS de extensiones telefnicas de los empleados.

Solucin:

SELECT DISTINCT MOVISTARFROM TEMPLEORDER BY EXTEL

3. Obtener una relacin por orden alfabtico de los departamentos. El nombre de los departamentos vendr precedido de las palabras 'departamento de'.

Solucin:

SELECT 'DEPARTAMENTO DE', NOMDEFROM TDEPTOORDER BY NOMDE

4. Llamemos presupuesto medio mensual de un departamento al resultado de dividir su presupuesto anual por 12. Supongamos que se decide aumentar los presupuestos medios mensuales de todos los departamentos en un 10 % a partir del mes de octubre inclusive. Hallar por orden alfabtico el nombre de departamento y su presupuesto anual total despus del incremento.

Solucin:

SELECT NOMDE, DEC((PRESU + 3 * (PRESU / 12) * 0.1),7,3)FROM TDEPTOWHERE PRESU / 12 > 5ORDER BY NOMDE

5. Obtener un listn telefnico de los empleados del departamento 121 incluyendo nombre de empleado, nmero de empleado y extensin telefnica. Por orden alfabtico.

Solucin:

SELECTNOMEM, NUMEM, MOVISTARFROM TEMPLEWHERE NUMDE = 121ORDER BY NOMEM

6. Hallar la comisin, nombre y salario de los empleados con ms de tres hijos, clasificados por comisin, y dentro de comisin por orden alfabtico.

Solucin:

SELECT COMIS, NOMEM, SALARFROM TEMPLEWHERE NUMHI > 3ORDER BY COMIS, NOMEM

7. Obtener salario y nombre de los empleados sin hijos por orden decreciente de salario y por orden alfabtico dentro de salario.Solucin:

SELECT SALAR, NOMEMFROM TEMPLEWHERE NUMHI = 0ORDER BY SALAR DESC, NOMEM

8. Obtener una relacin por orden alfabtico de los departamentos cuyo presupuesto es inferior a 50.000 euros. El nombre de los departamentos vendr precedido de las palabras 'departamento de'.

Solucin:

SELECT 'DEPARTAMENTO DE', NOMDEFROM TDEPTOWHERE PRESU < 50,000ORDER BY NOMDE

Si queremos que las palabras 'Departamento de' aparezcan en la misma columna que el nombre del departamento, habra que usar una operacin de concatenacin:

Solucin:

SELECT 'DEPARTAMENTO DE ' || NOMDEFROM TDEPTOWHERE PRESU < 50ORDER BY 1

9. Supongamos otra vez que se decide aumentar los presupuestos medios mensuales de todos los departamentos en un 10 % a partir del mes de octubre inclusive. Para los departamentos cuyo presupuesto mensual medio anterior a octubre es de ms de 5.000 euros, hallar por orden alfabtico el nombre de departamento y su presupuesto anual total despus del incremento.

Solucin:

SELECT NOMDE, (9*PRESU/12) + 3 * (PRESU / 12) * 1.10) AS [PRESUPUESTO ANUAL INCREMENTADO]FROM TDEPTOORDER BY NOMDE ASC, [PRESUPUESTO ANUAL INCREMENTADO]ASC

10. 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.

Solucin:

SELECT NOMEM, SALAR * 12, SALAR * 12 * 1.06, SALAR * 12 * 1.06 * 1.06,SALAR * 12 * 1.06 * 1.06 * 1.06FROM TEMPLEWHERE NUMHI > 4ORDER BY NOMEM

11. Hallar por orden alfabtico los nombres de los empleados tales que si se les da una gratificacin de 1.000 euros por hijo, el total de esta gratificacin no supera a la dcima parte del salario.

Solucin:

SELECT NOMEMFROM TEMPLEWHERE NUMHI * 1000 3000ORDER BY NUMEM

12. 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.

Solucin:

SELECT NOMEM, (SALAR+COMIS) AS [SALARIOTOTAL]FROM TEMPLEWHERE NUMDE=112ORDER BY NOMEM ASC, [SALARIOTOTAL] DESC

13. Hallar por orden de nmero de empleado el nombre y salario total (salario ms comisin) de los empleados cuyo salario total supera a 3.000 euros mensuales.

Solucin:

SELECT NUMEM, NOMEM, SALAR + COMISFROM TEMPLEWHERE SALAR + COMIS > SOME (SELECT SALAR + 3000FROM TEMPLE)ORDER BY NUMEM

14. Obtener los nmeros de los departamentos en los que haya algn empleado cuya comisin supere al 20 % de su salario.

Solucin:

SELECT DISTINCT NUMDEFROM TEMPLEWHERE COMIS > 0.2 * SALARORDER BY NUMDE

15. Para los empleados que no tienen comisin obtener por orden alfabtico el nombre y el cociente entre su salario y el nmero de hijos.

Solucin:

SELECT NOMEM, SALAR / NUMHIFROMWHERETEMPLECOMIS IS NULL ANDNUMHI 0ORDER BY NOMEM

16. 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.

Solucin:

SELECT NOMEM, SALAR * 0.01FROM TEMPLEWHERE NOMEMLIKE '%,%HONORIO%' ORNOMEM LIKE '%,%HONORIA%'ORDER BY NOMEM

17. 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).

Solucin:

SELECT NOMEM, NUMHI + 2, NUMHIFROM TEMPLEWHERE NOMEM BETWEEN 'A' AND 'LZ'ORDER BYNOMEM

18. Hallar por orden alfabtico los nombres de departamentos que o bien tienen directores en funciones o bien en propiedad y su presupuesto anual excede a50.000 euros o bien no dependen de ningn otro.

Solucin:

SELECT NOMDEFROM TDEPTOWHERE TIDIR = 'F' OR(TIDIR = 'P' AND PRESU > 50,000) ORDEPDE IS NULLORDER BY NOMDE

19. Hallar los nombres de los empleados que no tienen comisin, clasificados de manera que aparezcan primero aquellos cuyos nombres son ms cortos.

Solucin:

SELECT LENGTH (NOMEM), NOMEMFROM TEMPLEWHERE COMIS IS NULLORDER BY 1, 2

20. 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.

Solucin:

SELECT SUBSTR (NOMEM, 1, LENGTH (NOMEM) - 3)FROM TEMPLEWHERE NOMEM LIKE '%, _______%'ORDER BY 1

21. Obtener la lista de los empleados (nmero de empleado y comisiones que cobran) con salario mayor de 4.000 ; especificar con valor 0 si en alguna fila la comisin est a nulos.

Solucin:

SELECT NUMEM, COALESCE (COMIS, 0)FROM TEMPLEWHERE SALAR > 4000

22. Obtener los nombres y sueldos de los empleados que hayan empezado a trabajar en la empresa el ao 88 o despus, por orden alfabtico.

Solucin:

SELECT NOMEM, SALARFROM TEMPLEWHERE FECIN > '31.12.1987'ORDER BY 1

23. Obtener por orden alfabtico los nombres de los empleados que empezaron a trabajar en la empresa en el ao 1966.

Solucin:

SELECT NOMEMFROM TEMPLEWHERE FECIN BETWEEN '1.1.1966' AND '31.12.1966'ORDER BY NOMEM

24. Hallar cuntos departamentos hay y el presupuesto anual medio de ellos.

Solucin:

SELECT COUNT (*) AS DEPS, AVG (DEC(PRESU,7,2)) * 1000 AS PRESMEDFROM TDEPTO

25. Como la pregunta anterior, pero para los departamentos que no tienen director en propiedad

Solucin:

SELECT COUNT (*), AVG (DEC(PRESU,7,2)) * 1000FROM TDEPTOWHERE TIDIR 'P'

26. Hallar la masa salarial anual (salario ms comisin) de la empresa (se suponen14 pagas anuales).

Solucin:

SELECT (SUM (SALAR) + SUM (COMIS)) * 14FROM TEMPLE

27. Hallar la diferencia entre el salario ms alto y el ms bajo.

Solucin:

SELECT MAX (SALAR) - MIN (SALAR)FROM TEMPLE

28. Hallar el salario medio para los empleados con igual comisin y para los que no la tengan.

Solucin:

SELECT COMIS,AVG( SALAR), FROM TEMPLE GROUP BY COMIS ORDER BY COMIS

29. Agrupando por nmero de hijos, hallar la media por hijo del salario total (salario y comisin).

Por cuestin de interpretacin puede haber dos soluciones.

Solucin por Interpretacin 1:

SELECTNUMHI, SUM (SALAR) / SUM (NUMHI),SUM (COMIS) / SUM (NUMHI)FROMTEMPLEWHERE NUMHI 0GROUP BY NUMHIORDER BY NUMHI

Solucin por Interpretacin 2:

SELECTNUMHI, AVG (SALAR) / NUMHI,AVG (COMIS) / NUMHIFROMTEMPLEWHERE NUMHI 0GROUP BY NUMHIORDER BY NUMHI

30. Para cada departamento, hallar la media de la comisin con respecto a los empleados que la reciben y con respecto al total de empleados.

Solucin:

SELECT NUMDE, AVG (COMIS),SUM (COMIS) / COUNT (*)FROM TEMPLEGROUP BY NUMDEORDER BY NUMDE