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;