Junção à esquerda vs. junção exterior à esquerda no servidor SQL
LEFT JOIN
e LEFT OUTER JOIN
?
17 answers
De acordo com a documentação: de (Transact-SQL):
<join_type> ::=
[ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
JOIN
A palavra-chave OUTER
é marcada como opcional (entre parêntesis rectos), e o que isto significa neste caso é que, quer o indique ou não, não faz diferença. Note - se que, embora os outros elementos da cláusula de adesão também estejam marcados como facultativos, deixando Eles fora, farão, naturalmente, a diferença.
Por exemplo, a parte inteira do tipo da cláusula JOIN
é facultativa, caso em que a o valor por omissão é INNER
se indicar apenas JOIN
. Por outras palavras, Isto é 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 deixei nesta outra pergunta: SQL junção esquerda vs várias mesas na linha?.
Para responder à sua pergunta, não há diferença entre a junção à esquerda. e a junta exterior esquerda, são exactamente iguais...
No nível superior existem principalmente 3 tipos de junções:
- Interior
- exterior
- Cruz
Junção interna - obtém os dados se estiverem presentes em ambas as tabelas.
-
Junção exterior são de 3 tipos:
-
LEFT OUTER JOIN
- obtém os dados se estiverem presentes na tabela à esquerda. -
RIGHT OUTER JOIN
- obtém os dados se estiverem presentes na tabela à direita. -
FULL OUTER JOIN
- obtém dados se estiverem presentes em qualquer uma das duas tabelas.
-
CROSS JOIN , como o nome sugere, faz
[n X m]
que une tudo a tudo.
Semelhante ao cenário em que simplesmente listamos as tabelas de adesão (na cláusulaFROM
da declaraçãoSELECT
), usando vírgulas para separar o.
Observações:
- Se você apenas mencionar
JOIN
Então por padrão é umINNER JOIN
. - a adesão tem de ser
LEFT
|RIGHT
|FULL
Você não pode simplesmente dizerOUTER JOIN
. - podes largar
OUTER
a palavra-chave e dizerLEFT JOIN
ouRIGHT JOIN
ouFULL JOIN
.
Para aqueles que querem visualizá-los de uma forma melhor, por favor, vá para este link: Uma explicação Visual das junções SQL
Qual é a diferença entre a esquerda e a esquerda?
Nada. LEFT JOIN
e {[1] } são equivalentes.
Leia mais em representação Visual das ligações SQL
Eu sou um DBA PostgreSQL, tanto quanto eu pude entender a diferença entre a diferença entre junção externa ou não externa é um tópico que tem considerável discussão em toda a internet. Até hoje eu nunca vi uma diferença entre esses dois; então eu fui mais longe e eu tento encontrar a diferença entre eles. No final li toda a documentação sobre isso e encontrei a resposta para isso.
Por isso, se procurar na documentação (pelo menos no PostgreSQL), poderá encontrar este frase:
Em outras palavras,
LEFT JOIN
e LEFT OUTER JOIN
SÃO OS MESMOS
RIGHT JOIN
e RIGHT OUTER JOIN
SÃO OS MESMOS
Left Join
e Left Outer Join
são um e o mesmo . A primeira é a abreviatura para a segunda. O mesmo pode ser dito sobre a relação Right Join
e Right Outer Join
. A demonstração ilustrará a igualdade. Exemplos de trabalho de cada consulta foram fornecidos via SQL Fiddle . Esta ferramenta permitirá a manipulação de mãos da consulta.
Dados
Junção À Esquerda e exterior à esquerda Juntar
Resultados
Junção direita e junção exterior direita
Resultados
Acho mais fácil pensar em Uniões pela seguinte ordem:
- junção cruzada-um produto cartesiano de ambos os quadros. Todas as ligações começam aqui.
- junção interna-junção cruzada com um filtro adicionado.
- junção exterior - junção interior com elementos em falta (tanto da mesa esquerda como da direita) adicionado depois.
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)
[[[2]] agora é claro por que essas operações têm pseudônimos, bem como é claro apenas 3 os casos existem: interior, exterior, Cruz. Com duas sub-caixas para o exterior.
O vocabulário, a forma como os professores explicam isto, bem como algumas respostas acima, muitas vezes fazem com que pareça que há muitos tipos diferentes de adesão. Mas na verdade é muito simples.
Existem principalmente três tipos de juntas
- Interior: obtém dados, que estão presentes em ambas as tabelas
- apenas junção significa junção interior
-
Exterior: são de três tipos
- buscar os dados exteriores à esquerda apenas na tabela esquerda e na condição de correspondência
- à direita obtém os dados apenas na tabela direita e na condição de correspondência
- os dados completos das cadeias exteriores apresentam qualquer uma ou ambas as tabelas
- (esquerda, direita ou cheia) exterior Juntar-se pode ser escrito W / o escrevendo "exterior"
Cross Join: junta tudo a tudo
Para responder à tua pergunta
No servidor Sql junta-se a sintaxe o exterior é opcional
É mencionado no artigo msdn: https://msdn.microsoft.com/en-us/library/ms177634 (V = sql.130).aspx
Por isso, a seguinte lista mostra as sintaxas de junção equivalentes com e sem exterior
LEFT OUTER JOIN => LEFT JOIN
RIGT OUTER JOIN => RIGHT JOIN
FULL OUTER JOIN => FULL JOIN
Outros sintaxes equivalentes
INNER JOIN => JOIN
CROSS JOIN => ,
Recomendo vivamente o Artice do Mob Dotnet: junta-se ao servidor SQL
Existem apenas 3 ligações:
- a) junção cruzada = cartesiana (P. ex.: quadro A, Quadro B)
- B) junção interna = junção (P. ex.: Tabela A junta / junção interna B)
-
C) junção exterior:
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
LEFT JOIN
executa uma junção começando com a primeira (mais à esquerda) tabela e, em seguida, qualquer segundo correspondente (mais à direita) registros de tabela.
LEFT JOIN
eLEFT OUTER JOIN
são iguais.
Na junção esquerda e na junção exterior esquerda a realizar as mesmas operações.
Basicamente a junção à esquerda fornece todos os registos da tabela 1 e apenas os registos correspondentes da tabela 2.
Não contém os registos não compensados do quadro 2.
Também não precisamos de palavras-chave RIGHT
e LEFT
pois apenas uma delas é suficiente. Isso é porque SELECT * FROM A RIGHT JOIN B on A.ID = B.ID
é exatamente o mesmo que SELECT * FROM B LEFT JOIN A on A.ID = B.ID
. Encontrei todos estes Termos extra que confundem estudantes e novatos.
LEFT JOIN
deve ser o mesmo que LEFT OUTER JOIN
mas, na minha experiência, tenho visto um LEFT JOIN
puxar para trás Resultados diferentes do que um LEFT OUTER JOIN
, então comecei a usar a palavra-chave OUTER
, para ser mais específica e adequada. Linhas que deveriam ter voltado em um {[[0]} não onde como quando eu iria usar um LEFT OUTER JOIN
Ele fez. Estava a tentar explicar isto a um colega quando ele não conseguiu ter as filas de que também precisava. decidi pesquisar no Google a diferença de modo a ter algum tipo de apoio para lhe mostrar. Isto pode ser uma coisa específica do servidor SQL, sobre a qual tenho dúvidas. Eu diria que, em boa prática, seria mais aconselhável afirmar explicitamente que se pretende que ocorra uma junção exterior. Só a minha opinião.