Pregunta

¿Cuál es la diferencia entre LEFT JOIN y LEFT OUTER JOIN ?

¿Fue útil?

Solución

Según la documentación: FROM (Transact-SQL) ) :

<join_type> ::= 
    [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
    JOIN

La palabra clave OUTER está marcada como opcional (entre corchetes), y lo que esto significa en este caso es que si lo especifica o no, no hace ninguna diferencia. Tenga en cuenta que si bien los otros elementos de la cláusula de unión también están marcados como opcionales, dejarlos ellos por supuesto hará una diferencia.

Por ejemplo, toda la parte de tipo de la cláusula JOIN es opcional, en cuyo caso el valor predeterminado es INNER si solo especifica JOIN . En otras palabras, esto es legal:

SELECT *
FROM A JOIN B ON A.X = B.Y

Aquí hay una lista de sintaxis equivalentes:

A LEFT JOIN B            A LEFT OUTER JOIN B
A RIGHT JOIN B           A RIGHT OUTER JOIN B
A FULL JOIN B            A FULL OUTER JOIN B
A INNER JOIN B           A JOIN B

También observe la respuesta que dejé en esta otra pregunta SO: combinación izquierda de SQL vs varias tablas en la línea FROM ¿.

ingrese la descripción de la imagen aquí

Otros consejos

  

Para responder a su pregunta no hay diferencia entre LEFT JOIN   y LEFT OUTER JOIN, son exactamente iguales que dijeron ...

En el nivel superior hay principalmente 3 tipos de combinaciones:

  1. INTERIOR
  2. EXTERIOR
  3. CRUZ

  1. INNER JOIN : busca datos si están presentes en ambas tablas.

  2. OUTER JOIN son de 3 tipos:

    1. LEFT OUTER JOIN : busca datos si están presentes en la tabla de la izquierda.
    2. RIGHT OUTER JOIN : busca datos si están presentes en la tabla de la derecha.
    3. FULL OUTER JOIN : busca datos si están presentes en cualquiera de las dos tablas.
  3. CROSS JOIN , como sugiere su nombre, hace [n X m] que une todo a todo.
    Similar al escenario en el que simplemente enumeramos las tablas para unir (en la cláusula FROM de la declaración SELECT ), usando comas para separarlas.


Puntos a tener en cuenta:

  • Si acaba de mencionar JOIN , por defecto es un INNER JOIN .
  • Una unión OUTER debe ser LEFT | DERECHA | FULL no puede simplemente decir OUTER JOIN .
  • Puede eliminar la palabra clave OUTER y simplemente decir LEFT JOIN o RIGHT JOIN o FULL JOIN .

Para aquellos que quieran visualizarlos de una mejor manera, visite este enlace: Una explicación visual de las uniones SQL

  

¿Cuál es la diferencia entre la combinación izquierda y la combinación externa izquierda?

Nada . LEFT JOIN y LEFT OUTER JOIN son equivalentes.

Soy un DBA de PostgreSQL, en la medida en que pude entender la diferencia entre una diferencia externa o no externa es un tema que tiene una discusión considerable en todo Internet. Hasta hoy nunca vi una diferencia entre esos dos; Así que fui más lejos y trato de encontrar la diferencia entre esos. Al final, leí toda la documentación al respecto y encontré la respuesta para esto,

Entonces, si te fijas en la documentación (al menos en PostgreSQL) puedes encontrar esta frase:

" Las palabras INNER y OUTER son opcionales en todas las formas. INNER es el valor predeterminado; LEFT , RIGHT y FULL implican una unión externa. "

En otras palabras,

LEFT JOIN y LEFT OUTER JOIN SON LO MISMO

RIGHT JOIN y RIGHT OUTER JOIN SON LO MISMO

Espero que pueda ser una contribución para aquellos que todavía están tratando de encontrar la respuesta.

Left Join y Left Outer Join son uno y iguales . El primero es la taquigrafía para el segundo. Lo mismo puede decirse acerca de la relación Right Join y Right Outer Join . La manifestación ilustrará la igualdad. Se han proporcionado ejemplos de trabajo de cada consulta a través de SQL Fiddle . Esta herramienta permitirá la manipulación práctica de la consulta.

Dados

ingrese la descripción de la imagen aquí

Unirse a la izquierda y Unirse a la izquierda

ingrese la descripción de la imagen aquí

Resultados

ingrese la descripción de la imagen aquí


Unirse a la derecha y Right Outer Join

ingrese la descripción de la imagen aquí

Resultados

ingrese la descripción de la imagen aquí

Me resulta más fácil pensar en uniones en el siguiente orden:

  • CROSS JOIN: un producto cartesiano de ambas tablas. TODAS las combinaciones comienzan aquí
  • UNIÓN INTERNA - UNA UNIÓN CRUZADA con un filtro agregado.
  • OUTER JOIN: una combinación interna con elementos faltantes (de la tabla IZQUIERDA o DERECHA) añadido después.

Hasta que descubrí este modelo (relativamente) simple, los JOINS siempre fueron un poco más como un arte negro. Ahora tienen perfecto sentido.

Espero que esto ayude más de lo que confunde.

¿Por qué son IZQUIERDA / DERECHA e IZQUIERDA EXTERIOR / DERECHA EXTERIOR lo mismo? Vamos a explicar por qué este vocabulario. Comprenda que las combinaciones IZQUIERDA y DERECHA son casos específicos de la unión EXTERNA, y por lo tanto no podrían ser otra cosa que la IZQUIERDA EXTERNA / DERECHA EXTERNA. La unión EXTERNA también se denomina LLENA OTRA EXTERNA en lugar de las combinaciones IZQUIERDA y DERECHA que son resultados PARCIALES de la combinación OUTER. De hecho:

Table A | Table B     Table A | Table B      Table A | Table B      Table A | Table B
   1    |   5            1    |   1             1    |   1             1    |   1
   2    |   1            2    |   2             2    |   2             2    |   2
   3    |   6            3    |  null           3    |  null           -    |   -
   4    |   2            4    |  null           4    |  null           -    |   -
                        null  |   5             -    |   -            null  |   5
                        null  |   6             -    |   -            null  |   6

                      OUTER JOIN (FULL)     LEFT OUTER (partial)   RIGHT OUTER (partial)

Ahora está claro por qué esas operaciones tienen alias, así como está claro que solo existen 3 casos: INTERIOR, EXTERIOR, CRUZ. Con dos subcasos para el EXTERIOR. El vocabulario, la forma en que los maestros explican esto, así como algunas respuestas anteriores, a menudo hacen que parezca que hay muchos tipos diferentes de unirse. Pero en realidad es muy simple.

Para responder a tu pregunta

  

En Sql Server se une la sintaxis OUTER es opcional

Se menciona en el artículo msdn: https: //msdn.microsoft.com/en-us/library/ms177634(v=sql.130).aspx

Por lo tanto, la siguiente lista muestra sintaxis de unión con y sin OUTER

LEFT OUTER JOIN => LEFT JOIN
RIGHT OUTER JOIN => RIGHT JOIN
FULL OUTER JOIN => FULL JOIN

Otras sintaxis equivalentes

INNER JOIN => JOIN
CROSS JOIN => ,

Recomiendo encarecidamente Dotnet Mob Artice: Uniones en el servidor Sql ingrese la descripción de la imagen aquí

Hay principalmente tres tipos de ÚNETE

  1. Interno: recupera datos, que están presentes en ambas tablas
    • Sólo UNIR significa UNIR INNER
  2. Exterior: son de tres tipos

    • EXTREMO IZQUIERDO: recupera los datos presentes solo en la tabla izquierda & amp; condición coincidente
    • EXTERNO DERECHO -: busca datos presentes solo en la tabla derecha & amp; condición coincidente
    • COMPLETO EXTERNO - - recupera los datos presentes en cualquiera de las dos tablas
    • (IZQUIERDA o DERECHA o LLENA) OUTER JOIN se puede escribir sin escribir " OUTER "
  3. Cross Join: une todo a todo

Solo hay 3 combinaciones:

  • A) Unión cruzada = Cartesiana (E.g: Tabla A, Tabla B)
  • B) Unión interna = UNIR (Por ejemplo, tabla A: Tabla de unión interna / combinación A) B)
  • C) Unión externa:

       There are three type of outer join
       1)  Left Outer Join     = Left Join
       2)  Right Outer Join    = Right Join
       3)  Full Outer Join     = Full Join    
    

Espero que ayude.

El azúcar sintáctica, hace que sea más obvio para el lector ocasional que la combinación no es interna.

En el contexto de esta pregunta, también quiero publicar los 2 operadores 'APLICAR':

SE UNE :

  1. INNER JOIN = JOIN

  2. OUTER JOIN

    • LEFT OUTER JOIN = LEFT JOIN

    • JUNTA EXTERIOR DERECHA = ÚNICA ADECUADA

    • FULL OUTER JOIN = FULL JOIN

  3. CROSS JOIN

SELF-JOIN : este no es exactamente un tipo separado de unión. Básicamente, esto es unir una tabla usando una de las uniones anteriores. Pero sentí que vale la pena mencionarlo en el contexto de las discusiones de JOIN, ya que escuchará este término de muchos en la comunidad de desarrolladores de SQL.

APLICAR :

  1. APLICACIÓN CRUZADA : es similar a INNER JOIN (pero tiene la ventaja adicional de poder calcular algo en la tabla derecha para cada fila de la tabla izquierda y devolvería solo las filas coincidentes)
  2. SOLICITUD EXTERNA - Similar a LEFT OUTER JOIN (Pero ha agregado la ventaja de poder calcular algo en la tabla Derecha para cada fila de la tabla Izquierda y devolvería todas las filas de la Izquierda tabla independientemente de una coincidencia en la tabla derecha)

https: // www. mssqltips.com/sqlservertip/1958/sql-server-cross-apply-and-outer-apply/

https://sqlhints.com/2016/ 10/23 / outer-apply-in-sql-server /

Ejemplo de la vida real, cuándo usarlo APLICACIÓN EXTERIOR / CRUZADA EN SQL

Considero que el operador APPLY es muy beneficioso, ya que ofrece un mejor rendimiento que tener que hacer el mismo cálculo en una subconsulta. También reemplazan muchas funciones analíticas en versiones anteriores de SQL Server. Es por eso que creo que después de sentirse cómodo con JOINS, un desarrollador de SQL debería intentar aprender los operadores APPLY a continuación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top