2010-06-11 14 views

Respuesta

0

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.

+1

cuando no hay coincidencia, la combinación externa devuelve nulos –

2

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.

0

Eso significa que sus tablas coinciden bastante bien.

La página Wiki encontrada here muestra un buen ejemplo de cómo funcionan.

58

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): http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

Referencia: codeproject

+6

¿Cuál es su origen? se ve como http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins –

+0

Ha pasado un tiempo, podría ser el proyecto de código al que hace referencia. –

+0

Ok, lo he comprobado, es M.El blog de L Moffat donde debo haberlo encontrado. –

3

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.

0

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

  • 1, Data1, 1, 1, DataA
  • 2, Datos2, 2, 2, datab
  • 4, Data3, 4, 4, DataD

mientras que una combinación externa completa volvería

  • 1, Datos1, 1, 1, DataA
  • 2, Datos2, 2, 2, datab
  • NULL, NULL, 3, NULL, Datac
  • 4, Data4, 4, 4, DataD
  • 5, Data5, NULL, NULL, NULL
115

NOTA: Todos estos se pueden encontrar en la Wikipedia: Join (SQL).

Hay tres tipos de combinaciones externas:

  • LEFT OUTER JOIN
  • RIGHT OUTER JOIN
  • combinación externa completa

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.

+0

@polygenelubricants - sí, pero ese no es un tipo de ** OUTER ** join. – tster

+0

Muy buena explicación. ¿Puedes explicar "CROSS APPLY" en el servidor sql de la misma manera? – hemanth

+0

Creo que los operadores APPLY necesitan su propia pregunta. –

2

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.