Pplware

Vamos dar uns toques de SQL? IX

Por Pedro Gaspar para o PPLWARE

INNER, LEFT e RIGHT JOIN

Depois de várias semanas consecutivas terem pedido para falar aqui de JOINs esta semana vamos abordar este tema. JOIN ou junções de tabelas, consiste em juntar uma ou mais tabelas para obter resultados mais complexos. Neste artigo iremos focar-nos no INNER, LEFT e RIGHT JOIN.

Antes de mais gostaria de esclarecer uma duvida que tem havido nos artigos anteriores. Nestes artigos eu tenho-me baseado em MySQL, logo é normal que um ou outro parâmetro sejam específicos de MySQL. No entanto vou tentar fazer os artigos o mais imparciais possíveis conforme os meus conhecimentos e claro, conto sempre com a ajuda de todos os leitores para discutirmos o melhor uso de determinadas funções. Voltando ao exemplo da semana passada, vamos supor que a nossa base de dados pertence a uma empresa, onde temos para já duas tabelas: a tbl_pplware onde temos os nossos funcionários com os seguintes dados:

E a tabela horas onde vamos registar as horas de trabalho que os nossos funcionários realizam. Vamos considerar que de momento existem os seguintes registos:

Para juntarmos as duas tabelas precisamos de ter um ponto de união entre ambas, e neste caso o ponto de união está entre o id da tabela tbl_pplware e o id_p da tabela horas.

Sintaxe de Utilização do JOIN
SELECT nome_tabela.nome_campo [nome_tabela2.nome_campo2] FROM nome_tabela
[INNER/LEFT/RIGHT] JOIN nome_tabela2 ON nome_tabela.campo_uniao=nome_tabela2.campo_uniao

EXEMPLO INNER JOIN

Objectivo: Apresentar o nome das pessoas e o turno que fizeram Query:

SELECT tbl_pplware.nome AS nome, horas.turno
FROM `tbl_pplware`
INNER JOIN horas ON tbl_pplware.id_pessoa = horas.id_p

Resultado:

O INNER JOIN junta o resultado das duas tabelas, mas apenas mostra os resultados se existirem registos em comum em ambas as tabelas. Como podem reparar, o registo  Rui Lopes e  Sílvia Lopes não aparecem nos resultados, pois não têm horas registadas.

EXEMPLO LEFT JOIN Objectivo: Apresentar o nome de todas as pessoas e os turnos que fizeram Query:

SELECT tbl_pplware.nome AS nome, horas.turno
FROM `tbl_pplware`
LEFT JOIN horas ON tbl_pplware.id_pessoa = horas.id_p

Como podem repara,r com o LEFT JOIN já apresenta também os resultados que não apareceram no exemplo com o INNER JOIN, isto porque com o LEFT JOIN, é dada prioridade a primeira tabela que chamamos (neste caso tbl_pplware) ou seja, mesmo que não existam registos em comum na segunda tabela é-nos sempre apresentado os resultados da primeira tabela. Com o RIGHT JOIN acontece exactamente o contrario, é dada prioridade a tabela que faz o JOIN.

EXEMPLO3

Objectivo: Apresentar o nome e as horas feitas de todos os funcionários Query:

SELECT tbl_pplware.nome AS nome, SUM( HOUR( horas.data_saida ) - HOUR( horas.data_entrada ) ) AS horas
FROM `tbl_pplware`
LEFT JOIN horas ON tbl_pplware.id_pessoa = horas.id_p
GROUP BY tbl_pplware.id_pessoa

Resultado:

Espero ter conseguido ser o mais esclarecedor possível e para a semana continuamos a trabalhar nos JOIN’s. Bom fim de semana !!!

Artigos relacionados

Exit mobile version