Está en la página 1de 5

EJERCICIO

Se tiene el siguiente diseo fisco de tablas y relaciones. Responder las siguientes consultas: Se tiene el siguiente esquema HR, y contrasea HR

MODELO FISICO

a) Realizar una consulta que muestre el nombre del pas (COUNTRY_NAME) y el nombre de la regin (REGION_NAME), a la cual pertenece. Ordene los resultados por el nombre de regin de forma ascendente y el nombre de pas de forma descendente. Utilice alias de tabla
SELECT REGIONS.REGION_NAME AS REGION,COUNTRIES.COUNTRY_NAME AS PAIS FROM (SELECT * FROM COUNTRIES ORDER BY COUNTRIES.COUNTRY_NAME DESC) COUNTRIES INNER JOIN REGIONS ON COUNTRIES.REGION_ID = REGIONS.REGION_ID ORDER BY REGIONS.REGION_NAME ASC

b) Se requiere realizar un reporte para mostrar a los empleados (nombre, apellidos, total de aos que labora en la empresa, mes de ingreso) de los empleados que solo ingresaron en el mes de mayo- agosto.
SELECT FIRST_NAME AS NOMBRE,LAST_NAME AS APELLIDO,2013-TO_CHAR(HIRE_DATE,'YYYY') AS "AOS DE SERVICIO",TO_CHAR(HIRE_DATE,'MM') AS "MES DE INGRESO" FROM EMPLOYEES WHERE TO_CHAR(HIRE_DATE,'MM')>=04 AND TO_CHAR(HIRE_DATE,'MM')<=09

c) Se quiere obtener un reporte de los 3 primeros empleados que tienen el salario ms alto.
SELECT * FROM EMPLOYEES WHERE ROWNUM <= 3 ORDER BY SALARY DESC;

d) Realizar un reporte que muestre el apellido LAST_NAME del empleado en maysculas, el nombre FIRST_NAME en minsculas, concatenados en una sola columna llamada nombre_empleado y separados por una coma y un espacio en blanco. Que muestre el nombre del departamento de la tabla DEPARTMENT al cual pertenece, nombre de su puesto de trabajo JOB_TITLE, el salario anual (calcule el salario anual) con alias salario_anual. Ordenar la salida por departamento de forma ascendente y por puesto de forma descendente.

SELECT UPPER(EMPLOYEES.LAST_NAME)||', '||LOWER(EMPLOYEES.FIRST_NAME) AS "NOMBRE_EMPLEADO",DEPARTMENTS.DEPARTMENT_NAME AS DEPARTAMENTO, JOBS.JOB_TITLE AS TRABAJO,EMPLOYEES.SALARY AS "SALARIO_ANUAL" FROM EMPLOYEES INNER JOIN DEPARTMENTS ON EMPLOYEES.DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT_ID INNER JOIN (SELECT * FROM JOBS ORDER BY JOBS.JOB_TITLE DESC) JOBS ON JOBS.JOB_ID=EMPLOYEES.JOB_ID ORDER BY DEPARTMENTS.DEPARTMENT_NAME ASC

e) se quiere un reporte del promedio de empleados por departamento


SELECT AVG(EMPLOYEES.EMPLOYEE_ID) AS PROMEDIO, EMPLOYEES.DEPARTMENT_ID AS "ID DEPARTAMENTO" FROM EMPLOYEES GROUP BY EMPLOYEES.DEPARTMENT_ID

f) Hacer un reporte, para mostrar los empleados cuyo nombre empieza con la d y termina tambin con la d y que pertenezcan pas de Brazil.(buscar independientemente si fue ingresado en mayscula o minscula)
SELECT EMPLOYEES.FIRST_NAME AS NOMBRE,EMPLOYEES.LAST_NAME AS APELLIDO,COUNTRIES.COUNTRY_NAME AS PAIS,EMPLOYEES.PHONE_NUMBER AS TELEFONO, EMPLOYEES.SALARY,EMPLOYEES.HIRE_DATE FROM EMPLOYEES INNER JOIN DEPARTMENTS ON EMPLOYEES.DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT_ID INNER JOIN LOCATIONS ON DEPARTMENTS.LOCATION_ID = LOCATIONS.LOCATION_ID INNER JOIN COUNTRIES ON LOCATIONS.COUNTRY_ID = COUNTRIES.COUNTRY_ID WHERE FIRST_NAME LIKE 'D%D' OR FIRST_NAME LIKE 'd%d' AND COUNTRIES.COUNTRY_NAME ='Brazil'

g) Mostrar los departamentos que tienen ms de 10 empleados


SELECT DEPARTMENTS.DEPARTMENT_NAME AS DEPARTAMENTO,COUNT(EMPLOYEES.EMPLOYEE_ID) AS "NUMERO DE EMPLEADOS" FROM DEPARTMENTS INNER JOIN EMPLOYEES ON DEPARTMENTS.DEPARTMENT_ID = EMPLOYEES.DEPARTMENT_ID GROUP BY DEPARTMENTS.DEPARTMENT_NAME HAVING COUNT(EMPLOYEES.EMPLOYEE_ID)>10