Elaboração de Consultas
3 de abril de 2006
Recuperação de Informação
C1 : Listar os clientes que tem contatos cadastrados
Cd_cliente
CLIENTE
Cd_cliente
CONTATO
C1
1. Select nm_cliente, nm_contato FROM cliente, contato
Recuperação de Informação
C1 : Listar os clientes que tem contatos cadastrados
Cd_cliente
Cd_cliente
CLIENTE
CONTATO
5 registros
15 registros
1-1 registro
Junção na Igualdade
2. Select nm_cliente, nm_contato FROM cliente, contato
WHERE cliente.cd_cliente = contato.cd_cliente
Junções
•
•
•
•
Junção Natural
Junção na Igualdade
Auto - Junção
Junção Externa
Junções segundo padrão SQL
•
•
•
•
INNER
LEFT [OUTER]
RIGHT [OUTER]
FULL [OUTER]
Obs. cross join equivale ao Produto cartesiano !
Sintaxe geral de select
SELECT [ALL | DISTINCT ] lista_campos
FROM tabela1 tipo_JOIN tabela 2
ON tabela1.cd = tabela2.cd
[ tipo_JOIN tabela3 ON tabela3.cd = tabela2.cd]
Cross Join ( Produto cartesiano)
SELECT
nome_func,
nome_depto,
FROM
funcionario,
depto;
SELECT
nome_func, nome_depto,
FROM
funcionario
CROSS JOIN
depto;
Produto Cartesiano
C1 : Listar os clientes que tem contatos cadastrados
CLIENTE
CONTATO
Maria, Aldeny
Cd-cliente, nm_cliente
1 , Maria
Cd-cliente, cd-contato, nm_contato
1 , 1, Aldeny
Maria, Jose
Maria, Antonio
Maria, Ildefonso
2 , Joelma
1, 2, Jose
Joelma, Aldeny
3 , Carlos
3, 1, Antonio
Joelma, Jose
Joelma, Antonio
4 , Andre
3, 2, Ildefonso
Joelma, Ildefonso,
...
16 registros
SELECT nm_cliente, nm_contato FROM cliente
CROSS JOIN contato
Natural Join ( Junção Natural)
SELECT
nome_func,
nome_depto,
FROM
funcionario f,
depto d
WHERE
d.cd_depto = f.cd_depto
SELECT
nome_func, nome_depto,
FROM
funcionario
NATURAL JOIN
depto;
Campos de nome igual entre as tabelas serão condição de junção
NATURAL JOIN
C1 : Listar os clientes que tem contatos cadastrados
CLIENTE
Cd-cliente, nm_cliente
CONTATO
Cd-cliente, cd-contato, nm_contato
1 , Maria
1 , 1, Aldeny
Maria, Aldeny
2 , Joelma
1, 2, Jose
Maria, Jose
3 , Carlos
3, 1, Antonio
Carlos, Antonio
Carlos, Ildefonso
4 , Andre
3, 2, Ildefonso
SELECT nm_cliente, nm_contato FROM cliente
NATURAL JOIN contato
INNER JOIN ( Junção na Igualdade)
SELECT
nome_func,
nome_depto,
FROM
funcionario f,
depto d
WHERE
d.cd_depto = f.cd_depto
SELECT nome_func,
nome_depto,
FROM
funcionario f
INNER JOIN depto d
ON
d.cd_depto = f.cd_depto
INNER JOIN ... ON...
C1 : Listar os clientes que tem contatos cadastrados
CLIENTE
Cd-cliente, nm_cliente
CONTATO
Cd-cliente, cd-contato, nm_contato
1 , Maria
1 , 1, Aldeny
Maria, Aldeny
2 , Joelma
1, 2, Jose
Maria, Jose
3 , Carlos
3, 1, Antonio
Carlos, Antonio
Carlos, Ildefonso
4 , Andre
3, 2, Ildefonso
SELECT nm_cliente, nm_contato FROM cliente
INNER JOIN contato ON ( cliente.cd_cliente = contato.cd_cliente)
INNER JOIN 2( Junção na
Igualdade)
SELECT
nome_func,
nome_depto,
FROM
funcionario f,
depto d
WHERE
d.cd_depto = f.cd_depto
SELECT nome_func,
nome_depto,
FROM
funcionario f
INNER JOIN depto d
USING
(cd_depto)
Campos de nome igual permitem o USING
INNER JOIN ... USING...
C1 : Listar os clientes que tem contatos cadastrados
CLIENTE
Cd-cliente, nm_cliente
CONTATO
Cd-cliente, cd-contato, nm_contato
1 , Maria
1 , 1, Aldeny
Maria, Aldeny
2 , Joelma
1, 2, Jose
Maria, Jose
3 , Carlos
3, 1, Antonio
Carlos, Antonio
Carlos, Ildefonso
4 , Andre
3, 2, Ildefonso
SELECT nm_cliente, nm_contato FROM cliente
INNER JOIN contato USING(cd_cliente)
Modelo
Tratamento de N tabelas com JOIN
• Listar nome do cliente e nome dos produtos
por ele comprados ?
• Atributos : nm_cliente, de_item
• Tabelas: Cliente, Pedido, Item_pedido
CLIENTE
Cd-cliente, nm_cliente
INNER
JOIN
...
PEDIDO
ITEM_PEDIDO
Cd-cliente, nr_pedido
nr_pedido,nr_item,de_item
1, 1, ‘caneta’
1 , Maria
1,1
2 , Joelma
1, 2
2,1, ‘camiseta’
3 , Carlos
3, 3
2, 2, ‘sapato’
4 , Andre
1,2,’lapis’
3,1,’tinta’
3, 4
3,2,’areia’
4,1,’pincel’
(1)
(2)
SELECT nm_cliente, de_item FROM cliente INNER JOIN
pedido USING (cd_cliente) INNER JOIN item_pedido USING
(nr_pedido)
Download

Junção