Qual é a diferença entre LEFT JOIN
e LEFT OUTER JOIN
?
Qual é a diferença entre LEFT JOIN
e LEFT OUTER JOIN
?
Respostas:
Conforme a documentação: FROM (Transact-SQL) :
<join_type> ::=
[ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
JOIN
A palavra OUTER
- chave está marcada como opcional (entre colchetes). Nesse caso específico, se você especifica OUTER
ou não, não faz diferença. Observe que, embora os outros elementos da cláusula de junção também sejam marcados como opcionais, deixá- los de fora fará a diferença.
Por exemplo, toda a parte de tipo da JOIN
cláusula é opcional; nesse caso, o padrão é INNER
se você apenas especificar JOIN
. Em outras palavras, isso é legal:
SELECT *
FROM A JOIN B ON A.X = B.Y
Aqui está uma lista de sintaxes 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
Também dê uma olhada na resposta que eu deixei nessa outra pergunta do SO: SQL left join vs multiple tables on FROM FROM? .
INNER JOIN
à direita e JOIN
à esquerda na lista de equivalentes?
JOIN
s também.
Para responder à sua pergunta, não há diferença entre LEFT JOIN e LEFT OUTTER JOIN, elas são exatamente as mesmas que disse ...
INNER JOIN - busca dados se presentes nas duas tabelas.
OUTER JOIN são de 3 tipos:
LEFT OUTER JOIN
- busca dados se presentes na tabela esquerda.RIGHT OUTER JOIN
- busca dados se presentes na tabela correta.FULL OUTER JOIN
- busca dados, se presentes em uma das duas tabelas.CROSS JOIN , como o nome sugere, faz [n X m]
isso unir tudo a tudo.
Semelhante ao cenário em que simplesmente listamos as tabelas para associação (na FROM
cláusula da SELECT
instrução), usando vírgulas para separá-las.
Pontos a serem observados:
JOIN
, por padrão, é a INNER JOIN
.OUTER
associação deve ser LEFT
| RIGHT
| FULL
você não pode simplesmente dizer OUTER JOIN
.OUTER
palavra-chave e apenas dizer LEFT JOIN
ou RIGHT JOIN
ou FULL JOIN
.Para aqueles que desejam visualizá-los de uma maneira melhor, acesse este link: Uma Explicação Visual das Associações SQL
CROSS JOIN
o mesmo que FULL JOIN
?
Cross Join
e Full Outer Join
... de alguma forma, parece semelhante.
Qual é a diferença entre junção esquerda e junção externa esquerda?
Nada . LEFT JOIN
e LEFT OUTER JOIN
são equivalentes.
OUTER
é opcional.
Eu sou um DBA do PostgreSQL, tanto quanto pude entender a diferença entre a diferença de junções externas ou não externas é um tópico que tem uma discussão considerável em toda a Internet. Até hoje nunca vi diferença entre os dois; Então fui mais longe e tento encontrar a diferença entre eles. No final, li toda a documentação sobre o assunto e encontrei a resposta para isso,
Portanto, se você procurar na documentação (pelo menos no PostgreSQL), pode encontrar esta frase:
Em outras palavras,
LEFT JOIN
e LEFT OUTER JOIN
são os mesmos
RIGHT JOIN
e RIGHT OUTER JOIN
são os mesmos
Espero que possa contribuir para aqueles que ainda estão tentando encontrar a resposta.
Left Join
e Left Outer Join
são a mesma coisa . O primeiro é o atalho para o último. O mesmo pode ser dito sobre o relacionamento Right Join
e Right Outer Join
. A demonstração irá ilustrar a igualdade. Exemplos de trabalho de cada consulta foram fornecidos via SQL Fiddle . Essa ferramenta permitirá a manipulação prática da consulta.
Dado
Junção esquerda e junção externa esquerda
Resultados
Junção direita e junção externa direita
Resultados
Acho mais fácil pensar em Junções na seguinte ordem:
Até eu descobrir esse modelo (relativamente) simples, o JOINS era sempre um pouco mais uma arte negra. Agora eles fazem todo o sentido.
Espero que isso ajude mais do que confunde.
Por que esquerda / direita e esquerda / direita são iguais? Vamos explicar por que esse vocabulário. Entenda que junções ESQUERDA e DIREITA são casos específicos da junção EXTERIOR e, portanto, não pode ser outra coisa senão ESQUERDA EXTERNA / DIREITA EXTERNA. A junção OUTER também é chamada de EXTERIOR COMPLETO, em oposição às junções ESQUERDA e DIREITA, que são resultados PARCIAIS da junção OUTER. De fato:
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)
Agora está claro por que essas operações têm aliases, assim como é claro que existem apenas 3 casos: INTERNO, EXTERNO, CRUZ. Com dois sub-casos para o EXTERIOR. O vocabulário, a maneira como os professores explicam isso, bem como algumas respostas acima, geralmente fazem parecer que existem muitos tipos diferentes de associação. Mas é realmente muito simples.
JOIN
implica INNER JOIN
" se encaixa no seu raciocínio para o vocabulário de junção externa?
Para responder sua pergunta
No Sql Server junta-se à sintaxe OUTER é opcional
É mencionado no artigo msdn: https://msdn.microsoft.com/en-us/library/ms177634(v=sql.130).aspx
Portanto, a lista a seguir mostra as sintaxes equivalentes à junção com e sem OUTER
LEFT OUTER JOIN => LEFT JOIN
RIGHT OUTER JOIN => RIGHT JOIN
FULL OUTER JOIN => FULL JOIN
Outras sintaxes equivalentes
INNER JOIN => JOIN
CROSS JOIN => ,
Recomendamos vivamente Dotnet Mob Artice: ingressa no Sql Server
C) Junção 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 ajude.
Existem principalmente três tipos de JOIN
Exterior: são de três tipos
Cross Join: junta tudo a tudo
Açúcar sintático, torna mais óbvio para o leitor casual que a junção não é interna.
Apenas no contexto desta pergunta, quero postar os 2 operadores 'APPLY' também:
JUNTA - SE :
INNER JOIN = JOIN
JUNÇÃO EXTERNA
ESQUERDA EXTERIOR JOIN = ESQUERDA JOIN
JOIN EXTERIOR DIREITO = JOIN DIREITO
JOGO EXTERNO CHEIO = JOGO CHEIO
CROSS JOIN
SELF-JOIN : Este não é exatamente um tipo separado de junção. Basicamente, isso é unir uma tabela a ela mesma usando uma das junções acima. Mas achei que vale a pena mencionar no contexto JOIN discussões, pois você ouvirá esse termo de muitos na comunidade SQL Developer.
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/
Exemplo da vida real, quando usar OUTER / CROSS APPLY no SQL
Acho o operador APPLY muito benéfico, pois eles oferecem melhor desempenho do que ter que fazer o mesmo cálculo em uma subconsulta. Eles também substituem muitas funções analíticas em versões mais antigas do SQL Server. É por isso que acredito que, depois de se sentir confortável com o JOINS, um desenvolvedor SQL deve tentar aprender os operadores APPLY a seguir.
OUTER
palavra-chave é opcional.