Obtener datos de varias tablas

Visualización de datos de varias tablas

Las tablas relacionadas de una gran base de datos están vinculadas mediante el uso de claves externas y primarias o lo que a menudo se conoce como columnas comunes. La capacidad de unir tablas le permitirá agregar más significado a la tabla de resultados que se produce. Para unir tablas de 'n' números en una consulta, se necesitan condiciones de combinación mínimas (n-1). Según las condiciones de combinación, Oracle combina el par de filas coincidentes y muestra la que cumple la condición de combinación.

Las uniones se clasifican a continuación

  • Combinación natural (también conocida como equijoin o combinación simple): crea una combinación mediante el uso de una columna definida y con nombre común.

  • Combinación de no igualdad: une tablas cuando no hay filas equivalentes en las tablas que se van a unir, por ejemplo, para hacer coincidir los valores de una columna de una tabla con un rango de valores en otra tabla.

  • Autounión: une una tabla a sí misma.

  • Combinación externa: incluye registros de una tabla en la salida cuando no hay ningún registro coincidente en la otra tabla.

  • Combinación cartesiana (también conocida como producto cartesiano o combinación cruzada): replica cada fila de la primera tabla con cada fila de la segunda tabla. Crea una combinación entre tablas mostrando todas las combinaciones de registros posibles.

Unión natural

La palabra clave NATURAL puede simplificar la sintaxis de un equijoin.Un NATURAL JOIN es posible siempre que dos (o más) tablas tienen columnas con el mismo nombre y las columnas son compatibles con join, es decir, las columnas tienen un dominio de valores compartido. La operación une filas de las tablas que tienen valores de columna iguales para las mismas columnas con nombre.

Considere la relación de uno a muchos entre las tablas DEPARTMENTS y ​​EMPLOYEES. Cada tabla tiene una columna denominada DEPARTMENT_ID. Esta columna es la clave principal de la tabla DEPARTMENTS y ​​una clave externa de la tabla EMPLOYEES.

SELECT E.first_name NAME,D.department_name DNAME
FROM employees E NATURAL JOIN departments D;

FIRST_NAME DNAME
---------- ------
MILLER     DEPT 1
JOHN       DEPT 1
MARTIN     DEPT 2
EDWIN      DEPT 2

La siguiente consulta SELECT une las dos tablas especificando explícitamente la condición de unión con la palabra clave ON.

SELECT E.first_name NAME,D.department_name DNAME
FROM employees E JOIN departments D
ON (E.department_id = D.department_id);

Existen algunas limitaciones con respecto a NATURAL JOIN. No se puede especificar una columna LOB con NATURAL JOIN. Además, las columnas involucradas en la combinación no se pueden calificar por un nombre de tabla o alias.

USANDO Cláusula

Al utilizar combinaciones naturales, Oracle identifica implícitamente las columnas para formar la base de la combinación. Muchas situaciones requieren una declaración explícita de condiciones de combinación. En tales casos, usamos la cláusula USING para especificar los criterios de unión. Dado que, la cláusula USING une las tablas en función de la igualdad de columnas, también se conoce como Equijoin. También se conocen como combinaciones internas o combinaciones simples.

Sintaxis:

SELECT <column list>
FROM   TABLE1   JOIN   TABLE2	
USING (column name)

Considere la siguiente consulta SELECT, la tabla EMPLOYEES y la tabla DEPARTMENTS se unen usando la columna común DEPARTMENT_ID.

SELECT E.first_name NAME,D.department_name DNAME
FROM employees E JOIN departments D
USING (department_id);

Auto unión

Una operación SELF-JOIN produce una tabla de resultados cuando existe la relación de interés entre las filas que se almacenan dentro de una sola tabla. En otras palabras, cuando una tabla se une a sí misma, la combinación se conoce como Self Join.

Considere la tabla EMPLOYEES, que contiene el empleado y sus gerentes de informes. Para encontrar el nombre del gerente de un empleado, se requeriría una combinación en la tabla EMP. Este es un candidato típico para Self Join.

SELECT e1.FirstName Manager,e2.FirstName Employee
FROM employees e1 JOIN employees e2
ON (e1.employee_id = e2.manager_id)
ORDER BY e2.manager_id DESC;

No Equijoins

Una combinación de no igualdad se utiliza cuando las columnas relacionadas no se pueden unir con un signo igual, lo que significa que no hay filas equivalentes en las tablas para unir. Una combinación de no igualdad le permite almacenar el valor mínimo de un rango en una columna de un registro y el valor máximo en otra columna. Entonces, en lugar de encontrar una coincidencia de columna a columna, puede usar una combinación de no igualdad para determinar si el artículo que se envía se encuentra entre los rangos mínimo y máximo en las columnas. Si la combinación encuentra un rango coincidente para el artículo, el envío correspondiente La tarifa se puede devolver en los resultados. Al igual que con el método tradicional de combinaciones de igualdad, una combinación de no igualdad se puede realizar en una cláusula WHERE. Además, la palabra clave JOIN se puede utilizar con la cláusula ON para especificar columnas relevantes para la combinación.

SELECT E.first_name,
            J.job_hisal,
            J.job_losal,
            E.salary
     FROM employees E JOIN job_sal J
     ON (E.salary BETWEEN J.job_losal AND J.job_losal);

Podemos hacer uso de todos los parámetros de comparación discutidos anteriormente, como los operadores de igualdad y desigualdad, BETWEEN, IS NULL, IS NOT NULL y RELATIONAL.

Uniones externas

Una combinación externa se utiliza para identificar situaciones en las que las filas de una tabla no coinciden con las filas de una segunda tabla, aunque las dos tablas estén relacionadas.

Hay tres tipos de combinaciones externas: LEFT, RIGHT y FULL OUTER JOIN. Todos comienzan con INNER JOIN, y luego vuelven a agregar algunas de las filas que se han eliminado. Una LEFT OUTER JOIN vuelve a agregar todas las filas que se eliminan de la primera tabla (izquierda) en la condición de combinación, y las columnas de salida de la segunda tabla (derecha) se establecen en NULL. UN RIGHT OUTER JOIN vuelve a agregar todas las filas que se eliminan de la segunda tabla (derecha) en la condición de combinación, y las columnas de salida de la primera tabla (izquierda) se establecen en NULL. FULL OUTER JOIN vuelve a agregar todas las filas que se eliminan de ambas tablas.

Unión exterior derecha

UN RIGHT OUTER JOIN vuelve a agregar todas las filas que se eliminan de la segunda tabla (derecha) en la condición de combinación, y las columnas de salida de la primera tabla (izquierda) se establecen en NULL. Tenga en cuenta que la consulta a continuación enumera los empleados y sus departamentos correspondientes. Además, no se ha asignado ningún empleado al departamento 30.

SELECT E.first_name, E.salary, D.department_id          
FROM employees E, departments D
WHERE E.DEPARTMENT_ID (+) = D.DEPARTMENT_ID;

FIRST_NAME SALARY     DEPARTMENT_ID
---------- ---------- ----------
JOHN       6000       10
EDWIN      2000       20
MILLER     2500       10
MARTIN     4000       20
                      30

Izquierda combinación externa

Una LEFT OUTER JOIN vuelve a agregar todas las filas que se eliminan de la primera tabla (izquierda) en la condición de combinación, y las columnas de salida de la segunda tabla (derecha) se establecen en NULL. La consulta mostrada anteriormente se puede utilizar para demostrar la combinación externa izquierda, intercambiando la posición del signo (+).

SELECT E.first_name, E.salary, D.department_id
FROM employees E, departments D
WHERE   D.DEPARTMENT_ID = E.DEPARTMENT_ID (+);

FIRST_NAME SALARY     DEPARTMENT_ID
---------- ---------- ----------
JOHN       6000       10
EDWIN      2000       20
MILLER     2500       10
MARTIN     4000       20
                      30

Unión externa completa

FULL OUTER JOIN vuelve a agregar todas las filas que se eliminan de ambas tablas. La siguiente consulta muestra una lista de los empleados y sus departamentos. Tenga en cuenta que al empleado 'MAN' no se le ha asignado ningún departamento hasta ahora (es NULO) y el departamento 30 no está asignado a ningún empleado.

SELECT  nvl (e.first_name,'-') first_name, nvl (to_char (d.department_id),'-') department_id
FROM employee e FULL OUTER JOIN department d
ON e. depARTMENT_ID = d. depARTMENT_ID;

FIRST_NAME DEPARTMENT_ID
---------- --------------------
MAN        -
JOHN       10
EDWIN      20
MILLER     10
MARTIN     20
-          30

6 rows selected.

Producto cartesiano o unión cruzada

Para dos entidades A y B, A * B se conoce como producto cartesiano. Un producto cartesiano consta de todas las combinaciones posibles de las filas de cada una de las tablas. Por lo tanto, cuando una tabla con 10 filas se une con una tabla con 20 filas, el producto cartesiano es de 200 filas (10 * 20 = 200). Por ejemplo, unir la tabla de empleados con ocho filas y la tabla de departamentos con tres filas producirá una tabla de producto cartesiano de 24 filas (8 * 3 = 24).

La unión cruzada se refiere al producto cartesiano de dos tablas. Produce producto cruzado de dos tablas. La consulta anterior se puede escribir utilizando la cláusula CROSS JOIN.

Normalmente, una tabla de resultados de productos cartesianos no es muy útil. De hecho, tal tabla de resultados puede ser terriblemente engañosa. Si ejecuta la siguiente consulta para las tablas EMPLOYEES y DEPARTMENTS, la tabla de resultados implica que cada empleado tiene una relación con cada departamento, ¡y sabemos que simplemente no es el caso!

SELECT E.first_name, D.DNAME
FROM employees E,departments D;
La unión cruzada se puede escribir como,
SELECT E.first_name, D.DNAME
FROM employees E CROSS JOIN departments D;