Obtener datos de varias tablas

Visualización de datos de varias tablas

Las tablas vinculadas en una base de datos grande se vinculan mediante claves externas y primarias, o lo que a menudo se conoce como columnas compartidas. La capacidad de combinar tablas le permitirá agregar más significado a la tabla de resultados resultante. Se requieren condiciones de combinación mínimas (n-1) para unir n tablas numéricas en una consulta. Según las condiciones de combinación, Oracle concatena el par de filas coincidentes y muestra la que cumple la condición de combinación.

Las conexiones se clasifican de la siguiente manera

  • Unión natural (también conocida como combinación igual o combinación simple): crea una combinación utilizando una columna específica y con nombre común.

  • Sin combinación de igualdad: une tablas cuando las tablas que se van a unir no tienen filas equivalentes, por ejemplo, para asignar valores en una columna de una tabla a un rango de valores en otra tabla.

  • Autounión – Únase a la mesa consigo misma.

  • Unión externa: incluye registros de tabla en la salida si no hay un registro correspondiente en la otra tabla.

  • Unió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 unión entre tablas, mostrando todas las posibles combinaciones de registros.

Conexión natural

La palabra clave NATURAL puede simplificar la sintaxis de Equijoin. Una UNIÓN NATURAL es posible cuando dos (o más) tablas tienen columnas con el mismo nombre y las columnas son compatibles con las combinaciones, es decir, las columnas comparten un dominio de valor común. la operación concatena filas de tablas que tienen los mismos valores de columna para columnas con el mismo nombre.

Considere una relación de uno a varios 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 ​​la 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 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 restricciones con respecto a NATURAL JOIN. No puede especificar una columna LOB con NATURAL JOIN. Además, las columnas involucradas en la combinación no pueden ser calificadas por el nombre o alias de la tabla.

USANDO artículo

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

Sintaxis:

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

Considere la consulta SELECT a continuación, la tabla EMPLOYEES y la tabla DEPARTMENTS se unen mediante una columna DEPARTMENT_ID común.

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

Auto-unirse

SELF-JOIN crea una tabla de resultados cuando existe una relación de interés entre filas que están almacenadas en la misma tabla. En otras palabras, cuando una tabla se une a sí misma, esa combinación se denomina autocombinación.

Considere la tabla EMPLEADOS, que contiene empleados y sus gerentes de informes. Encontrar el nombre del administrador de un empleado requiere una combinación en la propia tabla EMP. Este es un candidato típico para unirse a sí mismo.

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;

Conexiones no equivalentes

Se utiliza una combinación no igual 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 desigualdad mantiene el valor mínimo de un rango en una columna del registro y el valor máximo en otra columna. Por lo tanto, en lugar de buscar una coincidencia de columna a columna, puede usar una combinación de desigualdad para determinar si el elemento que se envía se encuentra entre los rangos mínimo y máximo en las columnas. Si el sindicato encuentra un rango coincidente para el artículo, la tarifa de envío correspondiente puede devolverse en los resultados. Al igual que con el método tradicional de combinación de igualdad, se puede realizar una combinación de no igualdad en una cláusula WHERE. Además, la palabra clave JOIN se puede usar con la cláusula ON para especificar las columnas apropiadas para unirse.

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 usar todas las opciones de comparación discutidas anteriormente, como los operadores de igualdad y desigualdad, BETWEEN, IS NULL, IS NOT NULL y RELATIONAL.

Conexiones externas

La 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, incluso si las dos tablas están relacionadas.

Hay tres tipos de combinaciones externas: LEFT, RIGHT y FULL OUTER JOIN. Todos comienzan con una JUNTA INTERNA y luego vuelven a agregar algunas líneas que se eliminaron. LEFT OUTER JOIN vuelve a agregar todas las filas que se eliminaron 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. RIGHT OUTER JOIN vuelve a agregar las filas que se eliminaron 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 eliminadas de ambas tablas.

Unión exterior derecha

RIGHT OUTER JOIN vuelve a agregar las filas que se eliminaron 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 respectivos departamentos. Además, no se asigna 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

LEFT OUTER JOIN vuelve a agregar todas las filas que se eliminaron 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 anterior se puede utilizar para demostrar una combinación externa izquierda intercambiando el 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 eliminadas de ambas tablas. Debajo de la solicitud se muestran las listas de empleados y sus departamentos. Tenga en cuenta que todavía no se ha asignado ningún departamento al empleado «MAN» (es NULL), y el departamento 30 no se ha 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 BA * B se denomina producto cartesiano. El producto cartesiano consta de todas las combinaciones posibles de filas de cada tabla. Por lo tanto, cuando una tabla con 10 filas se une a una tabla con 20 filas, el producto cartesiano es 200 filas (10 * 20 = 200). Por ejemplo, la concatenación de una tabla de empleados con ocho filas y una tabla de departamentos con tres filas producirá una tabla de productos cartesianos de 24 filas (8 * 3 = 24).

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

La tabla de productos cartesianos no suele ser muy útil. De hecho, tal tabla de resultados puede ser engañosa. Si ejecuta la consulta a continuación en las tablas EMPLEADOS y DEPARTAMENTOS, la tabla de resultados asume que cada empleado tiene una relación con cada departamento, ¡y sabemos que este no es el caso!

SELECT E.first_name, D.DNAME
FROM employees E,departments D;

La conexión cruzada se puede escribir como,

SELECT E.first_name, D.DNAME
FROM employees E CROSS JOIN departments D;

🚫