Qual é a diferença entre LEFT JOIN
e LEFT OUTER JOIN
?
sql-server
tsql
left-join
outer-join
KG Sosa
fonte
fonte
OUTER
palavra-chave é opcional.Respostas:
Conforme a documentação: FROM (Transact-SQL) :
A palavra
OUTER
- chave está marcada como opcional (entre colchetes). Nesse caso específico, se você especificaOUTER
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 especificarJOIN
. Em outras palavras, isso é legal:Aqui está uma lista de sintaxes equivalentes:
Também dê uma olhada na resposta que eu deixei nessa outra pergunta do SO: SQL left join vs multiple tables on FROM FROM? .
fonte
INNER JOIN
à direita eJOIN
à esquerda na lista de equivalentes?JOIN
s também.No nível superior, existem principalmente três tipos de junções:
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 daSELECT
instrução), usando vírgulas para separá-las.Pontos a serem observados:
JOIN
, por padrão, é aINNER JOIN
.OUTER
associação deve serLEFT
|RIGHT
|FULL
você não pode simplesmente dizerOUTER JOIN
.OUTER
palavra-chave e apenas dizerLEFT JOIN
ouRIGHT JOIN
ouFULL JOIN
.Para aqueles que desejam visualizá-los de uma maneira melhor, acesse este link: Uma Explicação Visual das Associações SQL
fonte
CROSS JOIN
o mesmo queFULL JOIN
?Cross Join
eFull Outer Join
... de alguma forma, parece semelhante.Nada .
LEFT JOIN
eLEFT OUTER JOIN
são equivalentes.fonte
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:
"As palavras
INNER
eOUTER
são opcionais em todas as formas.INNER
É o padrão;LEFT
,RIGHT
eFULL
implicam uma associação externa."Em outras palavras,
LEFT JOIN
eLEFT OUTER JOIN
são os mesmosRIGHT JOIN
eRIGHT OUTER JOIN
são os mesmosEspero que possa contribuir para aqueles que ainda estão tentando encontrar a resposta.
fonte
Left Join
eLeft Outer Join
são a mesma coisa . O primeiro é o atalho para o último. O mesmo pode ser dito sobre o relacionamentoRight Join
eRight 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
fonte
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.
fonte
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:
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.
fonte
JOIN
implicaINNER JOIN
" se encaixa no seu raciocínio para o vocabulário de junção externa?Para responder sua pergunta
É 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
Outras sintaxes equivalentes
Recomendamos vivamente Dotnet Mob Artice: ingressa no Sql Server
fonte
Existem apenas 3 junções:
C) Junção externa:
Espero que ajude.
fonte
Existem principalmente três tipos de JOIN
Exterior: são de três tipos
Cross Join: junta tudo a tudo
fonte
Açúcar sintático, torna mais óbvio para o leitor casual que a junção não é interna.
fonte
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.
fonte