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:
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:
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:
Artigos relacionados
- Vamos dar uns toques em queries SQL?
- Vamos dar uns toques em queries SQL? II
- Vamos dar uns toques em queries SQL? III
- Vamos dar uns toques em queries SQL? IV
- Vamos dar uns toques de SQL? V
- Vamos dar uns toques de SQL? VI
- Vamos dar uns toques de SQL? VII
- Vamos dar uns toques de SQL? VIII
- Cábula” do MySQL