¿Cuál es la diferencia entre LEFT JOIN
y LEFT OUTER JOIN
?
¿Cuál es la diferencia entre LEFT JOIN
y LEFT OUTER JOIN
?
Respuestas:
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 (encerrada entre corchetes). En este caso específico, si especificas OUTER
o no, no hay 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 fuera marcará la diferencia.
Por ejemplo, toda la parte tipo de la JOIN
cláusula 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 eche un vistazo a la respuesta que dejé en esta otra pregunta SO: ¿ SQL dejó unirse frente a varias tablas en la línea FROM? .
INNER JOIN
a la derecha y solo JOIN
a la izquierda en la lista de equivalentes?
JOIN
s también.
Para responder a su pregunta, no hay diferencia entre LEFT JOIN y LEFT OUTER JOIN, son exactamente lo mismo que dijo ...
UNIÓN INTERNA : obtiene datos si están presentes en ambas tablas.
OUTER JOIN son de 3 tipos:
LEFT OUTER JOIN
- busca datos si están presentes en la tabla de la izquierda.RIGHT OUTER JOIN
- busca datos si están presentes en la tabla correcta.FULL OUTER JOIN
- busca datos si están presentes en cualquiera de las dos tablas.CROSS JOIN , como su nombre indica, hace [n X m]
que todo se una a todo.
Similar al escenario donde simplemente enumeramos las tablas para unir (en la FROM
cláusula de la SELECT
declaración), usando comas para separarlas.
Puntos a tener en cuenta:
JOIN
, por defecto es a INNER JOIN
.OUTER
unión tiene que ser LEFT
| RIGHT
El | FULL
No puedes simplemente decir OUTER JOIN
.OUTER
palabra clave y simplemente decir LEFT JOIN
o RIGHT JOIN
o FULL JOIN
.Para aquellos que quieran visualizarlos de una mejor manera, diríjase a este enlace: Una explicación visual de las uniones SQL
CROSS JOIN
lo mismo que FULL JOIN
?
Cross Join
y Full Outer Join
... de alguna manera parece similar.
¿Cuál es la diferencia entre la unión izquierda y la unión externa izquierda?
Nada . LEFT JOIN
y LEFT OUTER JOIN
son equivalentes
OUTER
es opcional.
Soy un DBA PostgreSQL, por lo que pude entender, la diferencia entre las diferencias externas o no externas es un tema que tiene una discusión considerable en Internet. Hasta hoy nunca vi una diferencia entre esos dos; Así que fui más allá y trato de encontrar la diferencia entre ellos. Al final leí toda la documentación al respecto y encontré la respuesta para esto,
Entonces, si busca documentación (al menos en PostgreSQL), puede encontrar esta frase:
En otras palabras,
LEFT JOIN
y LEFT OUTER JOIN
SON LOS MISMOS
RIGHT JOIN
y RIGHT OUTER JOIN
SON LOS MISMOS
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 lo mismo . La primera es la abreviatura de la segunda. Lo mismo puede decirse de la Right Join
y Right Outer Join
relación. La demostració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.
Dado
Unión izquierda y unión exterior izquierda
Resultados
Unión derecha y unión externa derecha
Resultados
Me resulta más fácil pensar en las Uniones en el siguiente orden:
Hasta que descubrí este modelo (relativamente) simple, JOINS siempre fue un poco más un arte negro. Ahora tienen mucho sentido.
Espero que esto ayude más de lo que confunde.
¿Por qué IZQUIERDA / DERECHA e IZQUIERDA EXTERIOR / DERECHA EXTERIOR son iguales? Vamos a explicar por qué este vocabulario. Comprenda que las uniones IZQUIERDA y DERECHA son casos específicos de la unión EXTERIOR y, por lo tanto, no pueden ser más que OUTER LEFT / OUTER RIGHT. La combinación OUTER también se denomina FULL OUTER en oposición a las combinaciones LEFT y RIGHT que son resultados PARCIALES de la combinación OUTER. En efecto:
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 también está claro que solo existen 3 casos: INTERIOR, EXTERIOR, CRUZ. Con dos sub-casos 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 unión. Pero en realidad es muy simple.
JOIN
implica INNER JOIN
" encaja con su razonamiento para el vocabulario de unión externa?
Para responder tu pregunta
En SQL Server se une a la sintaxis OUTER es opcional
Se menciona en el artículo de msdn: https://msdn.microsoft.com/en-us/library/ms177634(v=sql.130).aspx
Entonces, la siguiente lista muestra unir sintaxis equivalentes 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: se une al servidor SQL
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.
Hay principalmente tres tipos de UNIRSE
Exterior: son de tres tipos.
Cross Join: une todo a todo
El azúcar sintáctico hace que sea más obvio para el lector casual que la unión no es interna.
Solo en el contexto de esta pregunta, quiero publicar también los 2 operadores 'APLICAR':
UNE :
UNIÓN INTERNA = UNIRSE
ÚNETE EXTERIOR
IZQUIERDA EXTERIOR UNIR = IZQUIERDA UNIR
DERECHA EXTERIOR UNIR = DERECHA UNIR
FULL OUTER JOIN = FULL JOIN
UNIÓN CRUZADA
SELF-JOIN : este no es exactamente un tipo separado de combinación. Básicamente, esto es unir una tabla a sí mismo utilizando una de las combinaciones anteriores. Pero sentí que vale la pena mencionarlo en el contexto ÚNASE a las discusiones, ya que escuchará este término de muchos en la comunidad de Desarrolladores SQL.
APLICAR :
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 usar OUTER / CROSS APPLY en SQL
Encuentro que el operador APPLY es muy beneficioso ya que ofrecen 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 estar cómodo con JOINS, un desarrollador de SQL debería intentar aprender los operadores APLICAR a continuación.
OUTER
palabra clave es opcional.