Entendendo Outer Joins SQL – Parte 3 (Conexões Externas LEFT, RIGHT JOIN)

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”.

Leia também: Parte 2 e Parte 1 desta série de artigos.

Paulinha Winter

Mais artigos deste autor »

Analista de sistemas e desenvolvedora web. Formada em 2006 em Ciência da Computação e aluna da pós-graduação em Banco de Dados. Atualmente colaboradora da equipe de educação a distância por Internet (e-learning) do IEA, trabalha no desenvolvimento de sistemas e ferramentas voltadas ao EaD, comunidades e portais. Utilizando tecnologias como: PHP, MySQL, Cake, Webservices e metodologia Scrum. Blog: http://www.paulinhawinter.com


16 Comentários

Daniel
3

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.

Paulinha Winter
4

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

Ola
6

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

Paulinha Winter
9

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

Fernando
13

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

Deixe seu comentário

Seu endereço de e-mail não será publicado. Campos com * são obrigatórios!


× dois = 8

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>