Home - www.devmedia.com.br

Explorando os Tipos de Join – Parte I

Olá !

Join é a ferramenta básica de trabalho nos bancos de dados relacionais. É através dos diferentes tipos de join que conseguimos recuperar dados de uma ou mais tabelas com o auxílio dos relacionamentos existentes.

Nessa matéria discutiremos os 4 modêlos de join (inner join, left join, right join e full outer join);  aprenderemos também como escolher o tipo certo de join para cada situação.

Para os exemplos a seguir serão consideradas duas tabelas : produto e venda. A tabela venda - como o prórpio nome sugere - irá registrar vendas de itens cadastrados na tabela produto, mas pela característica do negócio também serão permitidas vendas de produtos sem cadastro.

O script abaixo irá criar e popular as tabelas venda e produto:

/* criação da tabela produto */
create table produto
(
cod_produto int primary key,
descr_produto varchar (20)
)

/* criação da tabela venda.*/

create table venda
(
id_venda int identity primary key,
cod_produto int ,
qtde int,
vlr_unit dec(9,2)
)

/* populando a tabela produto */

insert into produto values (101001,'Livro-1')
insert into produto values (101002,'Livro-2')
insert into produto values (101003,'Livro-3')
insert into produto values (101004,'Livro-4')
insert into produto values (101005,'Livro-5')

/* populando a tabela venda */

insert into venda (cod_produto,qtde,vlr_unit)  values (101001,2,14.00)
insert into venda (cod_produto,qtde,vlr_unit)  values
(101002,1,20.50)
insert into venda (cod_produto,qtde,vlr_unit)  values
(101003,4,12.00)
insert into venda (cod_produto,qtde,vlr_unit)  values (101030,6,
8.00)
insert into venda (cod_produto,qtde,vlr_unit)  values
(101031,1,44.00)

O relacionamento entre as tabelas produto e venda pode ser visualizado na figura-1.

Figura-1: Relacionamento entre as tabelas produto e venda


cadastrados

(tab.produto)

vendidos

(tab.venda)

vendidos sem cadastro

cadastrados e não vendidos

vermelho + verde

verde + azul

azul

vermelho

10101

10101

   

10102

10102

10103

10103

10104

 

10104

10105

10105

 

10130

10130

 

10131

10131

Observemos o seguinte:

A área em vermelho representa os produtos que foram cadastrados mas não foram vendidos.Para resgatar esses produtos devemos utilizar um left join , ligando um filtro para listar SOMENTE as linhas EXISTENTES na tabela produto SEM CORRESPONDÊNCIA na tabela venda ;

A área em azul representa produtos que foram vendidos e não possuem cadastro. Para resgatar esses produtos deveremos utilizar um right join ligando um filtro para listar SOMENTE as linhas EXISTENTES na tabela venda SEM CORRESPONDÊNCIA na tabela produto ;

A área em verde representa a intersecção dos dois conjuntos, isto é, produtos que foram vendidos e possuem cadastro. Para selecionar as linhas que possuem equivalência nas duas tabelas utilizamos o inner join ;

Para representar a união de todos os produtos com todas as vendas, independentemente de relacionamento (áreas em vermelho+verde+azul) utilizamos um full outer join.

Agora que conhecemos toda a teoria sobre os modêlos de join, seria interessante alguns exemplos práticos, não é mesmo ? Então não perca a continuação dessa matéria.

Um grande abraço a todos!

Paulo Ribeiro

 

 

Paulo Ribeiro (psribeiro@hotmail.com) é Microsoft MCDBA e membro da equipe editorial da SQL Magazine. Atua como DBA sênior em SQL Server na Livraria e Papelaria Saraiva S/A.

  Monitorando deadlocks com Trace Flags    
  Monitorando deadlocks com o Profiler    
  Variáveis tipo TABLE    
  Tabelas Temporárias    
  Subqueries Parte II: Queries correlatas    
  Subqueries – Parte I    
  Gerenciando Bloqueios–Parte II    
  Gerenciando Bloqueios–Parte I    
  Porque qualificar o owner na chamada de stored-procedures    
  Explorando os Tipos de Join – Parte II    
  Explorando os Tipos de Join – Parte I    
  Versões existentes do SQL Server 2000    
  Tuning - Plano de Execução no SQL Server - Parte 4    
  Tuning - Plano de Execução no SQL Server - Parte 3    
  Tuning - Plano de Execução no SQL Server - Parte 2    
  Tuning - Plano de Execução no SQL Server - Parte 1    
  Tuning - Estatísticas de I/O    
  Desfragmentando Índices no SQL Server    
  Procedures Não Documentadas
no SQL Server 2000 Parte 2
   
  Procedures Não Documentadas
no SQL Server 2000.
   
  SQL Server 2005 - YUKON    
  SQL Server 2000: o Contra-Ataque.    
  Boas-Vindas    
     

 

Todos os direitos reservados: DevMedia Group
SQL Magazine - 2004