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



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



      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

      14 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

      Deixe seu comentário

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

      *

      *

      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>