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