¿Cuál es la diferencia entre una unión completa y una unión interna?Diferencia entre unión interna y unión completa
Cuando hago una unión completa obtengo 832 registros y con una unión interna obtengo 830 registros.
¿Cuál es la diferencia entre una unión completa y una unión interna?Diferencia entre unión interna y unión completa
Cuando hago una unión completa obtengo 832 registros y con una unión interna obtengo 830 registros.
La unión interna no generará NULL en el campo de destino de unión. Si no hay un registro coincidente, el original no estará en la tabla.
Una combinación completa devolverá las filas de ambas tablas, incluso si no hay filas coincidentes en la otra tabla. Una unión completa es como una combinación de la derecha y una de la izquierda al mismo tiempo. Una unión interna solo devolverá filas que tengan al menos 1 socio en la otra tabla.
Eso significa que sus tablas coinciden bastante bien.
La página Wiki encontrada here muestra un buen ejemplo de cómo funcionan.
A FULL OUTER JOIN
es una unión de LEFT OUTER JOIN
y RIGHT OUTER JOIN
.
(? Hizo eso sentido)
Niza explicación visual que describe une (parte inferior izquierda describe externa completa):
Referencia: codeproject
¿Cuál es su origen? se ve como http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins –
Ha pasado un tiempo, podría ser el proyecto de código al que hace referencia. –
Ok, lo he comprobado, es M.El blog de L Moffat donde debo haberlo encontrado. –
La diferencia está en el comportamiento de inigualable filas
Por ejemplo, si la tabla A tiene una fila que no tiene una correspondencia en la tabla B en el campo en el que se define la unión, una unión interna omitiría la fila por completo, mientras que una unión completa incluiría la fila , pero con valores NULL para los campos de la tabla B. Viceversa para filas no coincidentes de la tabla B.
Considere la Tabla A y la Tabla B
Tabla A - (Key, Nombre)
1, Data1 2, Datos2 4, Data4 5, Data5
Tabla B - (Key , FKey, Nombre)
1, 1, DataA 2, 2, datab 3, NULL, Datac 4, 4, DataD
una combinación interna volvería
mientras que una combinación externa completa volvería
NOTA: Todos estos se pueden encontrar en la Wikipedia: Join (SQL).
Hay tres tipos de combinaciones externas:
La EXTERIOR palabra clave es opcional en todas las implementaciones que siguen el estándar, por lo que FULL JOIN es lo mismo que FULL OUTER JOIN. (he omitido la palabra OUTER
del SQL en el resto de esta respuesta.)
Veamos lo que hace cada uno.
Considere los dos conjuntos de datos de entrada siguientes:
Set "A" Set "B"
AA BB
-------- --------
Item 1 Item 3
Item 2 Item 4
Item 3 Item 5
Item 4 Item 6
en cuenta que hay algunos elementos de A que no están en B, y viceversa.
Ahora, si se escribe una instrucción SQL como este, usando LEFT JOIN:
SELECT * FROM A LEFT JOIN B ON AA = BB
obtendrá el siguiente resultado (los agujeros vacíos son en realidad NULL
marcas):
AA BB
-------- --------
Item 1
Item 2
Item 3 Item 3
Item 4 Item 4
Observe que obtendrá todas las filas de AA, o más bien, todas las filas de izquierda parte de la cláusula join.
Si cambia al uso de un RIGHT JOIN:
SELECT * FROM A RIGHT JOIN B ON AA = BB
AA BB
-------- --------
Item 3 Item 3
Item 4 Item 4
Item 5
Item 6
Note que consigue todas las filas de la parte derecha de la cláusula de combinación.
Sin embargo, si desea que todas las filas de ambos, que va a utilizar una unión completa:
SELECT * FROM A FULL JOIN B ON AA = BB
AA BB
-------- --------
Item 1 <-----+
Item 2 |
Item 3 Item 3 |
Item 4 Item 4 |
Item 5 +--- empty holes are NULL's
Item 6 |
^ |
| |
+---------------------+
Como se sugiere en un comentario, voy a completar las otras formas diferentes a unirse.
Con combinación interna:
SELECT * FROM A INNER JOIN B ON AA = BB
AA BB
-------- --------
Item 3 Item 3
Item 4 Item 4
Con combinación interna sólo tenemos las filas que coinciden en realidad, no hay agujeros a causa de la unión.
Una combinación cruzada produce un producto cartesiano, haciendo coincidir cada fila de la primera serie con cada fila de la segunda serie:
SELECT * FROM A CROSS JOIN B
AA BB
-------- --------
Item 1 Item 3 ^
Item 1 Item 4 +--- first item from A, repeated for all items of B
Item 1 Item 5 |
Item 1 Item 6 v
Item 2 Item 3 ^
Item 2 Item 4 +--- second item from A, repeated for all items of B
Item 2 Item 5 |
Item 2 Item 6 v
Item 3 Item 3 ... and so on
Item 3 Item 4
Item 3 Item 5
Item 3 Item 6
Item 4 Item 3
Item 4 Item 4
Item 4 Item 5
Item 4 Item 6
También tenga en cuenta que no especifican qué columnas que coinciden, ya no hay coincidencia hecha.
Finalmente, NATURAL join, en esta sintaxis no especificamos qué columnas coinciden, pero coinciden con los nombres de las columnas. En nuestro ejemplo artificial, no hay nombres de columna son los mismos, pero digamos que para este ejemplo concreto de que los nombres de columna fue XX en ambas tablas, entonces nosotros obtenemos el siguiente resultado:
SELECT * FROM A NATURAL JOIN B
+----------+------- matches on the names, and then the data
| |
v v
XX XX
-------- --------
Item 3 Item 3
Item 4 Item 4
Como se puede ver, obtener lo mismo que una unión INNER, pero no tiene que escribir la parte coincidente de la cláusula join.
De una manera bastante simple, la diferencia principal es:
INNER JOIN - Devuelve sólo las filas coincidentes. Por lo tanto, las filas no coincidentes no están incluidas.
FULL JOIN - Devuelve aquellas filas que existen en la tabla derecha y no en la izquierda, más las filas que existen en la tabla izquierda y no en la derecha, más allá de las filas internas.
cuando no hay coincidencia, la combinación externa devuelve nulos –