Baixe o app para aproveitar ainda mais
Prévia do material em texto
Helder O. Silveira Banco de Dados II Para a prática desta aula utilizaremos o banco de dados Firebird e o administrador FlameRobin. INNER JOIN, LEFT JOIN E RIGHT JOIN Para começar vamos criar as seguintes tabelas e inserir os valores conforme abaixo: – Tabelas FILIAL FIL_CODIGO FIL_NOME 1 MATRIZ 2 FILIAL 1 3 FILIAL 2 FUNCIONARIOS FUN_CODIGO FIL_CODIGO FUN_NOME 1 1 JOÃO 2 2 JOAQUIM 3 2 JOSÉ 4 3 MÁRCIO 5 null PEDRO Entendendo LEFT, RIGHT e INNER Quando dizemos que a tabela será Left ou Right, estamos informando ao comando SQL que ele deve obedecer o sentido para a Direita ou para a Esquerda, ou seja, ao utilizarmos Left Join o banco de dados irá analisar a estrutura da tabela da Direita e comparar com a tabela da Esquerda (leia-se Direita para a Esquerda), veja o desenho. Left e Right Join Left Join Na primeira situação temos o Left Join, a seta está apontando para a tabela FUNCIONARIOS simbolizando que a precedência é da tabela da Esquerda, então podemos dizer que no select abaixo, serão listados todos os Funcionários, mesmo aqueles que não tem Filial cadastrada. SELECT A.FUN_NOME, B.FIL_NOME FROM FUNCIONARIOS A LEFT JOIN FILIAL B ON A.FIL_CODIGO = B.FIL_CODIGO -- RESULTADO DA CONSULTA -- FUN_NOME FIL_NOME JOÃO MATRIZ JOAQUIM FILIAL 1 JOSÉ FILIAL 1 MÁRCIO FILIAL 2 PEDRO null Repare que Pedro foi incluído no resultado, porém ele não possui uma Filial associada em seu cadastro. Este tipo de Join é o mais utilizado quando não se tem certeza que todos os registros possuem ligação entre as tabelas e também na maioria das vezes por questões de desempenho. Right Join Na segunda situação foi utilizado o Right Join, também conhecido apenas por Join, que aponta para a tabela FILIAL simbolizando a precedência da tabela da Direita, logo, concluímos que os dados da tabela Filial devem existir para que o registro seja trazido no Select. SELECT A.FUN_NOME, B.FIL_NOME FROM FUNCIONARIOS A RIGHT JOIN FILIAL B ON A.FIL_CODIGO = B.FIL_CODIGO -- AINDA PODEMOS UTILIZAR SEM A PALAVRA RIGHT /* SELECT A.FUN_NOME, B.FIL_NOME FROM FUNCIONARIOS A JOIN FILIAL B ON A.FIL_CODIGO = B.FIL_CODIGO */ -- RESULTADO DA CONSULTA -- FUN_NOME FIL_NOME JOÃO MATRIZ JOAQUIM FILIAL 1 JOSÉ FILIAL 1 MÁRCIO FILIAL 2 Note que o funcionário Pedro desta vez não foi incluído na lista de resultados, isto ocorreu porque esta consulta traz apenas registros onde existe um cadastro de Filial para o Funcionário. Inner Join Temos ainda a situação do Inner Join que nada mais faz do que observar se existem registros combinados em ambas as tabelas, ou seja, para que um registro seja incluído na lista de resultados, o campo de ligação entre duas tabelas deve satisfazer as condições em ambas. O resultado desta consulta seria algo muito semelhante ao Join. Fonte: http://www.prosige.com.br
Compartilhar