Databases
T01-009-02 Composiciones internas con JOIN
Enunciado
Las formas anteriores de realizar composiciones internas requieren que existan atributos con el mismo nombre en las dos tablas a relacionar y que el sus valores hagan referencia a propiedades similares.
JOIN ONSe utiliza para unir tablas en la que los nombres de columna no coinciden en ambas tablas o se necesita establecer asociaciones más complicadas.
Ejemplo:
La siguiente sentencia relaciona a los empleados con sus jefes. A este tipo de relaciones se las denomina reflexivas, ya que utiliza la misma tabla en los dos lados del
JOIN. Al utilizar 2 veces la misma tabla, estamos obligados a crear un alias de cada una de las tablas, en este caso EMPLEADO y MANAGER, para que, al hacer referencia a los atributos, podamos especificar de qué tabla queremos extraer el valor de dicho atributo.
SELECT
EMPLEADO.FIRST_NAME AS "NOMBRE EMPLEADO",
EMPLEADO.LAST_NAME AS "APELLIDO EMPLEADO",
MANAGER.FIRST_NAME AS "NOMBRE JEFE",
MANAGER.LAST_NAME AS "APELLIDO JEFE"
FROM HR.employees EMPLEADO JOIN HR.employees MANAGER
ON (EMPLEADO.MANAGER_ID = MANAGER.EMPLOYEE_ID)
ORDER BY EMPLEADO.LAST_NAMEHay que observar que, en este caso, la relación la estamos haciendo entre dos atributos que no tienen el mismo nombre. Esa relación es:
ON (EMPLEADO.MANAGER_ID = MANAGER.EMPLOYEE_ID)y la debemos leer como: relaciona aquellos registros en los que el valor del atributo MANAGER_ID del empleado es igual al valor del atributo EMPLOYEE_ID del manager.
NOMBRE EMPLEADO APELLIDO EMPLEADO NOMBRE JEFE APELLIDO JEFE Ellen Abel Eleni Zlotkey Sundar Ande Alberto Errazuriz Mozhe Atkinson Adam Fripp David Austin Alexander Hunold Hermann Baer Neena Kochhar Ejercicio
Muestra el nombre y apellidos de los jefes de cada uno de los departamentos, ordenándolos alfabéticamente por el nombre del departamento:
Tipo
Solución
SELECT DEPARTMENT_NAME, FIRST_NAME, LAST_NAME
FROM HR.departments JOIN HR.employees
ON departments.MANAGER_ID = employees.EMPLOYEE_ID
ORDER BY DEPARTMENT_NAME
Prueba
LibrerÃas (Onfly databases)

