Leia também: Parte 2 e Parte 1 desta série de artigos.
3 – Conexões Externas
As conexões externas servem para efetuar junções entre tabelas sem que necessariamente exista entre elas uma combinação exata. O LEFT e o RIGHT OUTER JOIN são os componentes desse tipo de conexão. Não é obrigado o uso do termo OUTER, se você encontrar apenas LEFT JOIN, por exemplo, funcionará da mesma maneira.
O OUTER JOIN pode ser utilizado quando você quiser retornar uma lista de todos os programadores, mesmo que estes não estejam relacionados a nenhuma linguagem de programação. A diferença do LEFT para o RIGHT está apenas na identificação de qual tabela da junção irá retornar todos os dados. O mais comum é o LEFT, pois normalmente colocamos a tabela mais importante primeiro. Inclusive a ordem das tabelas e das cláusulas de restrições na consulta, em alguns bancos, altera o desempenho.
Obs.: O modelo de dados utilizado neste post encontra-se em Entendendo Outer Joins SQL – Parte 1 (Produto Cartesiano)
No exemplo abaixo quero uma lista com todos os programadores e suas empresas independente se eles estão relacionados a uma empresa ou não.
SELECT * FROM programadores p LEFT JOIN empresas e ON e.id_empresa = p.id_empresa;
Já neste exemplo, eu quero a lista de todas as empresas e seus programadores, independente se a empresa tem ou não programadores.
SELECT * FROM programadores p RIGHT JOIN empresas e ON e.id_empresa = p.id_empresa;
O banco vai relacionar cada linha de uma tabela com todas as linhas da outra tabela, trazendo as linhas que atendem a comparação existente na consulta (ON) e para as empresas que não tem nem um programador ele irá preencher com NULL os campos, como é o caso da “Empresa 5”.
15 Comentários
Parabéns pelo esclarecedor material. De fácil entendimento.
Oi Lúcio!
Obrigada!! Que bom que você gostou!
abraços,
Paulinha
Paulinha, parabéns pelo post. Eu leio muita coisa na internet e nunca deixo comentário mas seu material está muito bem feito e elucidativo. Eu desenvolvo para WEB e então trabalho com SQL há 4 anos e nunca tinha entendido cruzamentos e não vi ninguém explicar da maneira adequada até então nem em livros muito menos na internet. Obrigado por me ajudar a entender… no fundo é simples, só falta ser dito da maneira correta. Explicar as coisas de maneira simples é uma arte. Parabéns.
Oi Daniel…
Fico extremamente contente de saber que alcancei meu objetivo, que era explicar o assunto de uma forma que fosse fácil de entender. Principalmente sabendo que o comentário veio de alguém com experiência na área. Muito obrigada pelo comentário, eles motivam a escrever mais e mais.
Abraços,
Paulinha
Paulinha,
mto bom o artigo. Parabens!
O seu site esta totalmente desatualizado, clica-se em varios links e não vai para lugar nenhum, sem falar que o google diz que malware nele.
Que coisa feia para quem diz que é isso ou aquilo, que é o bom de disso.
Mas ja dizia um ditado dos matutos.
Peixe morre pela boca
Problema corrigido. Obrigada.
Tenho uma dúvida, e se eu quisesse trazer apenas os programadores que não estão vinculados a nenhuma linguagem ???
Olá,
Neste caso, umas das maneiras de trazer o resultado é utilizando Left join e where:
SELECT p.* FROM programadores p LEFT JOIN programadores_linguagens pl ON p.id_programador = pl.id_programador WHERE pl.id_programador IS NULL;
Abs
Muito bom o conteúdo do tópico. Bem resumido e de fácil entendimento.
Foi bastante útil. =]
Parabéns Paula!
Muito bem explicado!
Abs.
Perfeito, esse assunto carece de bons materiais como esse!
No caso da duvida do Mamura, ja respondida, acrescento:
Tenho uma dúvida, e se eu quisesse trazer apenas os programadores que não estão vinculados a nenhuma linguagem ??? E além disso preciso somente os que estão na empresa 1 ???
Nesse caso não adianta acrescentar a condição: …and p.id_empresa = 1
o resultado continua sendo os programadores 5 e 6 e eu quero apenas o programador 6 no resultado.
Desde ja agradeço
Muito bom. Tirou minhas duvidas sobre junções. Parabéns!
Post muito bem feito mesmo com exemplos bem explicados, coisa rara em postavens brasileiras, parabéns. O Brasil precisa de mais artigos assim.