Post on 07-Jul-2015
description
Aula 001
Banco de Dados II
PRONATEC
Programa Nacional de Acesso ao
Ensino Técnico e Emprego
PRONATEC
Programa Nacional de Acesso
ao Ensino Técnico e Emprego
1. Banco de Dados de Exemplo• Vamos considerar um banco de dados `empresa´ com as
tabelas `cliente´, `cidade´,`vendedor´ seguindo o DER abaixo:
VENDEDOR CLIENTE CIDADEV-C C-C1 N N 1
• Vendedor (PK=ID) Cidade (PK=ID)ID Nome Comissão
1 José da Silva 1,50%
2 Maria Aparecida 3,00%
3 Antônio Costa 1,50%
ID Nome Estado
1 Patos de Minas MG
2 Uberlândia MG
3 São Paulo SP
• Cliente (PK=ID, FK1=cidade, FK2=vendedor)ID Nome Cidade Vendedor Ultima Venda Vendas
1 Só Argamassas 2 1 José $500,00
2 A Constrular null 3 Maria $300,00
3 Barato Acabamentos 1 2 André $0,00
4 Supermercado Frondoso 3 null Ana $1200,00
2. JOIN• Até agora quando precisamos consultar ligando duas ou
mais tabelas usávamos a ligação diretamente na cláusula WHERE. Ex: where cliente.IDC = cidade.ID
• Em alguns casos podemos encontrar problemas neste tipo de ligação. Por exemplo, se um “cliente” não tem uma “cidade” ligada a ele, não iria aparecer no resultado da consulta, que pode ser um erro grave.
• Nesse caso teríamos que informar ao SELECT para retornar também esses clientes sem cidade.
• Fazemos isso com a cláusula “Join”.
• O JOIN pode ser empregado de várias formas distintas
3. INNER JOIN• Este é o JOIN mais comum utilizado e sua característica é
só trazer registros que contenham correspondência nas outras tabelas utilizadas, sendo assim no caso de um “cliente” sem ligação com “cidade” o cliente não seria mostrado no resultado
• Exemplo: Mostrar nome do cliente, suas vendas e a cidade onde está localizado
select cliente.nome, cliente.vendas, cidade.nome
from cliente INNER JOIN cidade ON cidade.id = cliente.idc
• Ou seja, esse comando não mudou nada do nosso problema: clientes sem cidades ainda não saem
• Então usar INNER JOIN é a mesma coisa que ligar usando a cláusula WHERE, somente uma forma diferente de fazer a mesma coisa.
4. LEFT JOIN / RIGHT JOIN• Este é o JOIN que resolve o nosso problema dos
“clientes” sem “cidades”.
• Exemplo:
select cliente.nome, cliente.vendas, cidade.nome
From cliente LEFT JOIN cidade ON cidade.id = cliente.idc
• O “LEFT” indica de qual tabela você se refere ao estar querendo o resultado mesmo sem ligação. LEFT em inglês significa “esquerda” ou seja nos referimos a tabela da esquerda, que nesse exemplo é a tabela “cliente”
• Podemos ainda usar na forma RIGHT JOIN (da direita)
select cliente.nome, cliente.vendas, cidade.nome
from cidade RIGHT JOIN cliente ON cidade.id = cliente.idc
5. FULL JOIN• Um problema incomum mas que pode ocorrer é
precisarmos listar tanto os dados do lado esquerdo (LEFT) que não tenha correspondência com o lado direito (RIGHT) e vice-versa.
• Nesse caso não podemos usar apenas LEFT ou RIGHT pois se usarmos o LEFT ficaremos sem o resulto do RIGHT e vice-versa, então a solução é usar o FULL JOIN que pega todos os dados mesmo que não se correspondam a esquerda ou a direita.
6. JOIN Com Chave Composta• Notamos que para usarmos o JOIN devemos ligar a chave
primária de uma tabela com a estrangeira da outra
• Caso as chaves sejam compostas (mais de um atributo) então devemos usar o operador lógico AND para a associação
• Exemplo, no Banco de Dados:
NF (id,serie,data,cliente) Chave Primária: ID, Serie
Itens (nf, serie, codigo, preço, quantidade)
select itens.codigo, itens.preço, itens.quantidade
From nf INNER JOIN itens
ON nf.id = itens.nf AND nf.serie = itens.serie
7. Banco de Dados de Exemplo• Este é o DER e a estrutura do Banco de Dados que usaremos de
exemplo nas próximas aulas para aprendizado: