Uploaded by JOSÉ MARÍA GARCÍA PÉREZ

DAW-BD-GARCIA PEREZ, JOSE MARIA-77841330S-UD04-EJER01

advertisement
Desarrollo de Aplicaciones Multiplataforma – Programación
UD04: RELACIÓN DE CONSULTAS
Modo de entrega
Crear las tablas e insertar los datos para poder realizar las operaciones y consultas que
se exponen en el ejercicio. Una vez comprobados los resultados de las mismas copiarlas
a este documento que se guardará de la siguiente forma.
DAM-BD-Apellidos, Nombre-DNI-UD04-EJER01.docx
DAW-BD-Apellidos, Nombre-DNI-UD04-EJER01.docx
DAM-BD-Totana García, Luís Regino-48495051T-UD04-EJER01.docx
DAW-BD-Totana García, Luís Regino-48495051T-UD04-EJER01.docx
Creación de tablas:
Utilizando el archivo adjunto realiza los siguientes ejercicios.
Para completar los ejercicios copia la sentencia que usas para recuperar los datos en el cuadro.
Ejercicios
1) Crea una sentencia que seleccione todos los datos de la tabla empleados.
SELECT *
FROM EMPLEADOS;
2) Crea una sentencia que devuelva los valores de la tabla empleados ordenados por DNI.
SELECT *
FROM EMPLEADOS
pág. 1
Desarrollo de Aplicaciones Multiplataforma – Programación
ORDER BY DNI;
3) Crea una sentencia que seleccione todos los datos de la tabla EMPLEADOS y los devuelva
ordenados por el código postal (de forma descendente) y el DNI(de forma ascendente).
SELECT *
FROM EMPLEADOS
ORDER BY COD_POSTAL DESC, DNI ASC;
4) Selecciona el DNI, nombre y apellidos de los empleados que tengan un salario superior a
1800.
SELECT DNI, NOMBRE, APELLIDO1, APELLIDO2
FROM EMPLEADOS
WHERE SALARIO > 1800;
5) Utilizando la tabla empleados. Dime el salario medio de los empleados
SELECT AVG(SALARIO)
FROM EMPLEADOS;
6) Utilizando la tabla empleados. Dime el salario medio de los empleados por sexo (hombres,
mujeres)
SELECT SEXO, AVG(SALARIO)
FROM EMPLEADOS
GROUP BY SEXO;
7) Utilizando la tabla empleados. Dime que se gasta la empresa en salarios al mes.
SELECT SUM(SALARIO)
FROM EMPLEADOS;
8) Utilizando la tabla empleados. Dime que se gastaría la empresa en salarios si lo
aumentaremos un 10%
SELECT SUM(SALARIO) * 1.10
FROM EMPLEADOS;
9) Utilizando la tabla empleados. Selecciona el DNI, nombre, apellidos, salario y el salario
incrementando un 10% para saber en cuanto se quedaría el salario de cada trabajador.
Ordénalo por salario de forma descendente.
SELECT DNI, NOMBRE, APELLIDO1, APELLIDO2, SALARIO, SALARIO * 1.10
FROM EMPLEADOS
ORDER BY SALARIO DESC;
10) Selecciona el nombre, apellido1 y apellido2 de la tabla empleados en una sola columna y
renómbrala como NOMBRE_COMPLETO
SELECT NOMBRE||' '||APELLIDO1||' '||APELLIDO2 NOMBRE_COMPLETO
FROM EMPLEADOS;
11) Selecciona el DNI y la dirección1 de todos los empleados. En aquellos que encuentres el
valor nulo sustitúyelo por “NO DISPONIBLE”.
SELECT DNI, NVL (DIRECC1,'NO DISPONIBLE')
FROM EMPLEADOS;
pág. 2
Desarrollo de Aplicaciones Multiplataforma – Programación
12) Selecciona aquellos empleados cuyo DNI empiece por 48.
SELECT DNI
FROM EMPLEADOS
WHERE DNI LIKE '48%';
13) Sabemos que uno de nuestros empleados vive en una calle o avenida que se llama ‘Mayor’,
devuelve todos los empleados cuya dirección sea una calle, avenida o cualquier tipo de via que
contenga esa palabra
SELECT DIRECC1, DIRECC2
FROM EMPLEADOS
WHERE DIRECC1 LIKE '%Mayor%'
OR DIRECC2 LIKE '%Mayor%';
14) Usando la tabla empleados devuelve todos los datos de los empleados que tengan en la
posición 4 de su DNI el valor 8.
SELECT *
FROM EMPLEADOS
WHERE DNI LIKE '____8%';
15) Usando la tabla empleados. Selecciona aquellos empleados que tengas la dirección a nulo.
SELECT *
FROM EMPLEADOS
WHERE DIRECC1 IS NULL
AND DIRECC2 IS NULL;
16)Usando la tabla empleados. Selecciona aquellos empleados nacidos entre el ‘01/01/1985’
SELECT *
FROM EMPLEADOS
WHERE FECHA_NAC BETWEEN '01/01/1985' AND '01/01/1996';
17)Usando la tabla empleados. Selecciona aquellos empleados nacidos entre el ‘01/01/1985’ y
el ‘01/01/1996’. Crea dos SELECT uno utilizando BETWEEN, otro sin él.
SELECT *
FROM EMPLEADOS
WHERE FECHA_NAC >= '01/01/1985' AND FECHA_NAC <='01/01/1996';
18) Realiza una consulta donde obtengamos las universidades de Sevilla o Cádiz.
SELECT *
FROM UNIVERSIDADES
WHERE NOMBRE_UNIV IN('SEVILLA','CÁDIZ');
MULTITABLA
19) Realiza una consulta que muestre el número de alumnos que ha tenido cada uno de los
centros que tenemos en la tabla UNIVERSIDADES.
SELECT U.NOMBRE_UNIV ,COUNT(EMPLEADO_DNI)
FROM UNIVERSIDADES U, ESTUDIOS E
pág. 3
Desarrollo de Aplicaciones Multiplataforma – Programación
WHERE U.COD_UNIVERSIDADES=E.UNIVERSIDAD
GROUP BY U.NOMBRE_UNIV;
20) Realiza una consulta donde obtengamos todos nombres de trabajos menos el de gerente.
SELECT NOMBRE_TRAB
FROM TRABAJOS
WHERE NOMBRE_TRAB <> 'GERENTE';
21) Realiza una consulta donde contemos el número de empleados que son mujeres.
SELECT COUNT (*)
FROM EMPLEADOS
WHERE SEXO='M';
22) Realiza una consulta donde obtengamos la media del salario mínimo y máximo de la tabla
TRABAJOS.
SELECT AVG(SALARIO_MIN) AS SAL_MEDIO_MIN, AVG(SALARIO_MAX) AS SAL_MEDIO_MAX
FROM TRABAJOS;
23) Realiza una consulta donde obtengamos el nombre de los empleados junto a su salario.
SELECT E. NOMBRE, E. APELLIDO1, E. APELLIDO2, E. SALARIO, HS. SALARIO AS SALARIO_HS
FROM EMPLEADOS E
INNER JOIN (SELECT EMPLEADO_DNI, SALARIO
FROM HISTORIAL_SALARIAL
WHERE FECHA_FIN IS NULL) HS
ON E.DNI = HS.EMPLEADO_DNI;
24) Realiza una consulta que indique el nombre del departamento que pertenece el empleado
‘94565478P’
SELECT NOMBRE_DPTO
FROM DEPARTAMENTOS
WHERE COD_DPTO IN (SELECT COD_DPTO
FROM HISTORIAL_LABORAL
WHERE DNI_EMPLEADOS ='94565478P');
25) Realiza una consulta donde obtengamos de la tabla ESTUDIOS, DNI de los empleados
ordenados por Universidad descendente y año de manera ascendente. Muestra también, el
nombre de universidad obtenido de la tabla UNIVERSIDADES.
SELECT ES.EMPLEADOS_DNI, ES.UNIVERSIDAD, ES.ANYO, U.NOMBRE_UNIV
FROM ESTUDIOS ES
pág. 4
Desarrollo de Aplicaciones Multiplataforma – Programación
INNER JOIN UNIVERSIDADES U
ON ES.UNIVERSIDADES = U.COD_UNIV
ORDER BY 2 DESC,3;
26) Realiza una consulta que devuelva el dni, nombre, apellido1 y apellido2 del empleado y el
dni de su jefe directo.
SELECT E.DNI, E.NOMBRE, E.APELLIDO1, E.APELLIDO2, HL.DNI_SUPERVISOR DNI_JEFE
FROM EMPLEADOS E
LEFT JOIN HISORIAL_LABORAL HL
ON E.DNI_EMPLEADO=HL.DNI_EMPLEADO;
27) Realiza una consulta que devuelva el dni, nombre, apellido1 y apellido2 del empleado, el
dni de su jefe directo, el nombre, apellido1 y apellido2.
SELECT A.DNI,
A.NOMBRE,
A.APELLIDO1,
A.APELLIDO2,
HL.DNI SUPERVISOR,
A.DNI_JEFE,
E2.NOMBRE AS NOMBRE_JEFE,
E2.APELLIDO1 AS APELLIDO1_JEFE,
E2.APELLIDO2 AS APELLIDO2_JEFE
FROM EMPLEADOS E2
INNER JOIN (SELECT E.DNI,
E.DNI,
E.NOMBRE,
E.APELLIDO1,
E.APELLIDO2,
HL.DNI SUPERVISOR DNI_JEFE,
FROM EMPLEADOS E
LEFT JOIN HISTORIAL_LABORAL HL
ON E.DNI = HL.DNI_EMPLEADO) A
ON A.DNI_JEFE = E2.DNI;
28) Calcula el incremento de sueldo del empleado ‘41789456P’ en porcentaje desde sus inicios
en la empresa hasta ahora. Utiliza la tabla HISTORIAL_SALARIAL para ello.
SELECT A.EMPLEADO DNI
, SALARIO_MIN
,SALARIO_MAX
,ROUND((SALARIO MAX-SALARIO MIN)/SALARIO MIN)*100,2) AS PORCENTAJE
FROM (SELECT HL.EMPLEADO DNI,HL.SALARIO AS SALARIO MAX
FROM HISTORIAL_ SALARIAL HL
INNER JOIN (SELECT MAX(FECHA COMIENZO)AS FECHA MAX
FROM HISTORIAL SALARIAL
WHERE EMPLEADO_DNI ='41789456P')HSMAX
pág. 5
Desarrollo de Aplicaciones Multiplataforma – Programación
ON HL.FECHA COMIENZO = HSMAX.FECHA MAX
AND HL.EMPLEADO DNI='41789456P')A
INNER JOIN( SELECT HL.EMPLEADO DNI,HL.SALARIO AS SALARIO MIN
FROM HISTORIAL SALARIAL HL
INNER JOIN (SELECT MIN(FECHA_COMIENZO) AS FECHA MIN
FROM HISTORIAL SALARIAL
WHERE EMPLEADO DNI='41789456P'HSMIN
ON HL.FECHA_ COMIENZO = HSMIN.FECHA_MIN
AND HL.EMPLEADO DNI='41789456P')B
ONA.EMPLEADO_DNI=B.EMPLEADO_DNI;
29) Indica todos los empleados que son ex alumnos de la UCAM mostrando sus nombres y
apellidos. Para ello debes servirte de las tablas ESTUDIOS, UNIVERSIDADES y EMPLEADOS.
30) Realiza una consulta que muestre todas aquellas mujeres que tengan un sueldo mayor que
la media de los hombres en la empresa.
SELECT*
FROM EMPLEADOS
WHERE SEXO ='M'
AND SALARIO ›(SELECT AVG(SALARIO)
FROM EMPLEADOS
WHERE SEXO = 'H');
SELECT*
FROM EMPLEADOS
WHERE SEXO = 'M'
AND SALARIO >(SELECT AVG(SALARIO)
FROM HISTORIAL SALARIAL
WHERE DNI EMPLEADO IN (SELECT DNI
FROM EMPLEADOS
WHERE SEXO = 'H'));
31) Dime el número de empleados por departamento que hay en la empresa.
SELECT COD DPTO. COUNT(*)
FROM HISTORIAL LABORAL
WHERE FEC FIN IS NULL
GROUP BY COD_ DPTO;
pág. 6
Download