Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

marcia.jordana

Uso de Inner Join

Recommended Posts

Oi, Márcia.

 

Vamos ver se consigo ajudar, considere o comando:

 

SELECT VENDAS. *, VENDEDORES.Nome FROM VENDAS, VENDEDORES WHERE VENDAS.Vendedor = VENDEDORES.Codigo

 

Nesse caso serão retornadas todas as colunas da tabela VENDAS e apenas a coluna NOME da tabela VENDEDORES, usando o mesmo critério de associação.

 

Aqui deve ser feita uma observação: verificando a cláusula WHERE, notamos que serão retornados apenas os registros que tenham equivalência nas duas tabelas. Quando houver um registro na tabela VENDAS que tenha um código de vendedor não cadastrado na tabela de vendedores ou um código de vendedor igual a NULL, ele nào será mostrado. Esse tipo de ligação em que é necessária a correspondência da informação nas duas tabelas é chamado INNER JOIN. O mesmo comando anterior pode ser reescrito como:

 

SELECT VENDAS.*, VENDEDORES.Nome

FROM VENDAS INNER JOIN VENDEDORES

ON VENDAS.Vendedor = VENDEDORES.Codigo

 

Nesse caso, a cláusula WHERE desaparece e é substituída pela sintaxe do INNER JOIN. Ambas as sentenças são equivalentes e retornam a mesma informação.

 

Quando se deve preservar a informação, mesmo que não haja a correspondência entre as colunas, deve-se usar o OUTER JOIN. Há três tipos de OUTER JOIN: LEFT OUTER JOIN, RIGHT OUTER JOIN e FULL OUTER JOIN. Os comandos LEFT e RIGHT referem-se à posição da tabela em relação à palavra JOIN. Por exemplo, em:

 

FROM VENDAS LEFT OUTER JOIN VENDEDORES

 

a tabela VENDAS é a tabela da esquerda (LEFT) e a tabela VENDEDORES é a tabela da direita (RIGHT).

 

O comando LEFT OUTER JOIN preserva todas as linhas da tabela da esquerda, descartando as da direita quando não há correspondência. Por exemplo:

 

SELECT VENDAS.*, VENDEDORES.Nome FROM VENDAS

LEFT OUTER JOIN VENDEDORES

ON VENDAS.Vendedor = VENDEDORES.Codigo

 

mostrará todas as linhas da tabela VENDAS. Caso não haja correspondência entre o código do vendedor na tabela de vendedores, o nome do vendedor retornará NULL.

 

No comando RIGHT OUTER JOIN, a tabela da direita é preservada, descartando-se os registros da tabela esquerda quando não há correspondência entre elas.

 

O comando FULL OUTER JOIN não descarta registros de nenhuma tabela. Ele mostra os registros de ambas as tabelas, mesmo quando não houver correspondência.

 

Caso não sejam encontrados os dados da tabela da direita, suas informações serão mostradas como NULL. O mesmo acontece quando não forem encontrados os dados da tabela esquerda.

 

Para evitar escrever o nome completo da tabela antes de cada coluna a ser recuperada, pode-se especificar um apelido para a tabela, passando-se a referenciar sempre a ele. Um exemplo disso é o seguinte:

 

SELECT V.*, VD.Nome FROM VENDAS V

LEFT OUTER JOIN VENDEDORES VD

ON V.Vendedor = VD.Codigo

 

Nesse comenado foi definido um apelido V para a tabela de vendas e VD para a tabela de vendedores. Em todos os locais em que as tabelas são referenciadas é usado o apelido determinado.

 

O último tipo de junção entre tabelas é o UNION. Esse comando junta duas ou mais tabelas, retornando tanto os registros da primeira como da segunda, em seqüência. As tabelas precisam ter a mesma estrutura para permitir uma UNION. Um caso para se usar esse tipo de comando é quando se tem uma tabela para as vendas de 2001 e uma tabela para as vendas de 2000, com a mesma estrutura, e se deseja listar as vendas de ambos os anos simultaneamente. Para isso, usa-se o comando:

 

SELECT * FROM VENDAS2001

UNION

SELECT * FROM VENDAS2000

 

Isso junta as duas tabelas, retornando os valores armazenados em ambos os anos como se fosse uma única tabela.

 

(Fonte: Desenvolvendo Aplicações com Delphi 6, Bruno Sonnino, Makron Books)

 

Espero ter ajudado mais do que cansado você!

 

:rolleyes:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Teodorico!

 

Obrigada hein ! Valeu pela dica ! Eu já tinha procurado alguma coisa a respeito, mas não tinha achado nada que me desse um exemplo prático.

 

Eu só estou com mais uma dúvida com relação as tabelas do meu banco:

 

Eu tenho uma tabela de departamentos e outra de subdepartamentos,

 

Sendo que eu posso ter vários subdepartamentos para um único departamento.

Eu também posso ter um subdepartamento comum para vários departamentos.

 

A idéia é de que; quando o usuário selecionar um departamento, eu liste todos os subdepartamentos correspondentes.

 

Veja a estrutura das tabelas:

 

 

departamentos

===========

IDdepartamento

NomeDepartamento

 

 

 

 

SubDepartamentos

==============

IDdepartamento

IDsubdepartamento

NomeSubDepartamento

 

 

 

E na instrução SQL eu fiz assim:

 

select departamentos.*, subdepartamentos.* from Departamentos INNER JOIN SubDepartamentos on Departamentos.IDdepartamento = SubDepartamentos.IDdepartamento

 

 

 

Será que esta instrução é a correta a ser usada?

 

Grata;

 

Márcia

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, MarciaComo você tem uma relação n para n, acredito que seria interessante criar uma tabela (intermediária) de relacionamento contendo o código do Departamento e o SubDepartamento.P.S.: Desculpe-me não ter respondido antes, mas estou super atrapalhado com um projeto a ser entregue... :lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.