Está en la página 1de 5

Programación de Bases de Datos con SQL 6-4: Autouniones y Consultas

Jerárquicas Actividades de Práctica

Objetivos
• Crear y ejecutar una sentencia SELECT para unir una tabla consigo misma mediante una
autounión
• Interpretar el concepto de una consulta jerárquica
• Crear un informe con estructura de árbol
• Aplicar formato a datos jerárquicos
• Excluir ramas de la estructura de árbol

Terminología
Identifique el término para cada una de las siguientes definiciones.

SELF JOIN Une una tabla consigo misma

CONNECT_BY Recupera datos en función de una relación jerárquica natural


entre las filas de una tabla
CONNECT_BY, LEVEL Determina el número de pasos en sentido descendente desde la
fila de inicio que deberá devolver una consulta jerárquica
START WITH Identifica la fila de inicio de una consulta jerárquica

CONNECT_BY Especifica la relación entre las filas principales y las filas


secundarias de una consulta jerárquica

Inténtelo/Resuélvalo

Para cada problema, utilice la base de datos Oracle.

1. Muestre el apellido y número de empleado junto con el apellido y número de jefe. Etiquete las
columnas: Employee, Emp#, Manager y Mgr#, respectivamente.

SENTENCIA REQUERIDA:

SELECT e.LAST_NAME AS EMPLOYEE, e.EMPLOYEE_ID AS “Emp#”, m.LAST_NAME AS


MANAGER, m.EMPLOYEE_ID AS “Mgr#”
FROM EMPLOYEES e
LEFT JOIN EMPLOYEES m ON e.MANAGER_ID = m.EMPLOYEE_ID
START WITH e.MANAGER_ID IS NULL
CONNECT BY PRIOR e.EMPLOYEE_ID = e.MANAGER_ID

2. Modifique la pregunta 1 para mostrar todos los empleados y sus jefes, incluso aunque el
empleado no tenga jefe. Ordene la lista alfabéticamente por el apellido del empleado.

SENTENCIA REQUERIDA:

SELECT e.LAST_NAME AS EMPLOYEE, e.EMPLOYEE_ID AS "Emp#", m.LAST_NAME AS


MANAGER, m.EMPLOYEE_ID AS "Mgr#"
FROM EMPLOYEES e
LEFT JOIN EMPLOYEES m ON e.MANAGER_ID = m.EMPLOYEE_ID
ORDER BY e.LAST_NAME;

3. Muestre el nombre y la fecha de contratación de todos los empleados contratados antes que sus
jefes, junto con el nombre y la fecha de contratación de sus jefes. Etiquete las columnas como
Employee, Emp Hired, Manager y Mgr Hired, respectivamente.

SENTENCIA REQUERIDA:

SELECT e.LAST_NAME AS Employee, e.HIRE_DATE AS "Emp Hired", m.LAST_NAME AS


Manager, m.HIRE_DATE AS "Mgr Hired"
FROM EMPLOYEES e
JOIN EMPLOYEES m ON e.MANAGER_ID = m.EMPLOYEE_ID
WHERE e.HIRE_DATE < m.HIRE_DATE
START WITH m.MANAGER_ID IS NULL
CONNECT BY PRIOR e.EMPLOYEE_ID = e.MANAGER_ID;

4. Escriba un informe que muestre la jerarquía del departamento de Lex De Haans. Incluya el
apellido, el salario y el ID de departamento en el informe.

SENTENCIA REQUERIDA:

SELECT e.LAST_NAME AS EMPLOYEE, e.SALARY AS SALARY, e.DEPARTMENT_ID AS "DEPT


ID",
LEVEL AS HIERARCHY_LEVEL
FROM EMPLOYEES e
START WITH e.LAST_NAME = 'De Haan'
CONNECT BY PRIOR e.EMPLOYEE_ID = e.MANAGER_ID;

5. ¿Qué parte de esta sentencia es incorrecta?

SELECT last_name, department_id, salary


FROM employees
START WITH last_name = 'King'
CONNECT BY PRIOR manager_id = employee_id;
OBSERVACIÓN:

La consulta que otorgada se ve correcta, ejecuta la sentencia sin errores para mostrar la jerarquía
descendente de empleados a partir del empleado con el apellido 'King'. Para asegurarnos que la
consulta funcione correctamente, debemos asegurarnos que las columnas MANAGER_ID y
EMPLOYEE_ID tengan las relaciones adecuadas en nuestra base de datos.
Como las columnas y relaciones son las adecuadas, la consulta nos devuelve los empleados que
tienen como jefe al empleado con el apellido 'King', mostrando sus apellidos, IDs de departamento y
salarios.
En conclusión, a los fines que buscamos en la ejecución de la sentencia no hay errores en su
sintaxis.

6. Cree un informe que muestre el diagrama de organización de la tabla de empleados completa.


Escriba el informe de modo que en cada nivel se sangren 2 espacios a cada empleado. Dado que
Oracle Application Express no puede mostrar los espacios delante de la columna, utilice -
(menos) en su lugar.
SENTENCIA REQUERIDA:

SELECT LPAD('-', (LEVEL - 1) * 2, '-') || LAST_NAME AS EMPLOYEE, DEPARTMENT_ID AS "Dept


ID", SALARY
FROM EMPLOYEES
START WITH MANAGER_ID IS NULL
CONNECT BY PRIOR EMPLOYEE_ID = MANAGER_ID;

7. Vuelva a escribir el informe del apartado 6 y excluya a De Haan y a todas las personas que
trabajan para él.

SENTENCIA REQUERIDA:

SELECT LPAD('-', (LEVEL - 1) * 2, '-') || LAST_NAME AS EMPLOYEE, DEPARTMENT_ID AS "Dept


ID", SALARY
FROM EMPLOYEES
START WITH (MANAGER_ID IS NULL OR MANAGER_ID != (SELECT EMPLOYEE_ID FROM
EMPLOYEES WHERE LAST_NAME = 'De Haan'))
CONNECT BY PRIOR EMPLOYEE_ID = MANAGER_ID
AND MANAGER_ID != (SELECT EMPLOYEE_ID FROM employees WHERE LAST_NAME = 'De
Haan');

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

También podría gustarte