Explorando os Tipos de Join – Parte I
Veja neste artigo quatro tipos de Join: inner join, left join, right join e full outer join.
Você não gostou da qualidade deste conteúdo?
(opcional) Você gostaria de comentar o que não lhe agradou?
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.
2 COMENTÁRIOS



