¿Cuál es la diferencia entre "INNER JOIN" y "OUTER JOIN"?
¿Cómo encajan también el LEFT JOIN
, el RIGHT JOIN
y el FULL JOIN
?
4488
3
¿Cómo encajan también el LEFT JOIN
, el RIGHT JOIN
y el FULL JOIN
?
Asumiendo que estás uniendo en columnas sin duplicados, lo cual es un caso muy común:
Una unión interna de A y B da el resultado de A intersecta B, es decir, la parte interna de una intersección diagrama de Venn.
Una unión externa de A y B da los resultados de A unión B, es decir, las partes externas de una unión de diagrama de Venn.
**Ejemplos
Suponga que tiene dos tablas, con una sola columna cada una, y datos como los siguientes
Observe que (1,2) son exclusivos de A, (3,4) son comunes, y (5,6) son exclusivos de B.
Unión interna
Una unión interna utilizando cualquiera de las consultas equivalentes da la intersección de las dos tablas, es decir, las dos filas que tienen en común.
Unión exterior izquierda
Una unión externa izquierda dará todas las filas en A, más cualquier fila común en B.
Unión externa derecha
Una unión externa derecha dará todas las filas en B, más cualquier fila común en A.
Una unión externa completa
Un full outer join le dará la unión de A y B, es decir, todas las filas de A y todas las filas de B. Si algo en A no tiene un dato correspondiente en B, entonces la parte de B es nula, y viceversa.
Una unión interna sólo muestra filas si hay un registro coincidente en el otro lado (derecho) de la unión.
Una unión externa (izquierda) muestra filas para cada registro en el lado izquierdo, incluso si no hay filas coincidentes en el otro lado (derecho) de la unión. Si no hay ninguna fila que coincida, las columnas del otro lado (derecho) mostrarán NULLs.
Las uniones internas requieren que exista un registro con un ID relacionado en la tabla unida.
Las uniones externas devolverán registros para el lado izquierdo incluso si no existe nada para el lado derecho.
Por ejemplo, tiene una tabla Pedidos y una tabla DetallesDelOrden. Están relacionadas por un "OrderID".
Pedidos
**Detalles del pedido
La solicitud
sólo devolverá los pedidos que también tengan algo en la tabla OrderDetails.
Si lo cambia a OUTER LEFT JOIN
entonces devolverá registros de la tabla Orders aunque no tengan registros de OrderDetails.
Puede utilizar esto para encontrar pedidos que no tengan ningún OrderDetails indicando un posible pedido huérfano añadiendo una cláusula where como
WHERE OrderDetails.OrderID IS NULL
.