elaboração de consulta continuação 7/abril/2006. modelo

21
Elaboração de Consulta Continuação 7/abril/2006

Upload: internet

Post on 17-Apr-2015

104 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Elaboração de Consulta Continuação 7/abril/2006. Modelo

Elaboração de ConsultaContinuação

7/abril/2006

Page 2: Elaboração de Consulta Continuação 7/abril/2006. Modelo

Modelo

Page 3: Elaboração de Consulta Continuação 7/abril/2006. Modelo

Auto- junção

• Seja a tabela Cliente

Page 4: Elaboração de Consulta Continuação 7/abril/2006. Modelo

Auto-junção

• O código do cliente-indicador é o código do cliente que indicou aquela empresa.

Ex. MACDONALDS foi indicada pela Brastemp,

BOBS pela Embraco, etc.

A EMBRACO e BRASTEMP não foram indicadas por ninguém ( cd_cliente_indicador is null )

Page 5: Elaboração de Consulta Continuação 7/abril/2006. Modelo

Auto-junção

• O usuário solicitou um relatório de nome dos clientes e de seus respectivos indicadores

Cd_cliente, nm_cliente, cd_cliente_indicador

1, Brastemp, null,2, Embraco, null3, Mcdonalds, 1

4, Bobs, 25, Grendelli, 3

6, Jo Calcados, 4

Page 6: Elaboração de Consulta Continuação 7/abril/2006. Modelo

Auto-junção

• Ou self join

• É usada para efetuar junção de uma tabela a si mesma, como se fosse duas tabelas, renomeando temporariamente , ao menos, uma tabela na instrução SQL

Page 7: Elaboração de Consulta Continuação 7/abril/2006. Modelo

Auto- junção

SELECT A.nm_cliente as INDICADO , I.nm_cliente as INDICADOR

FROM

CLIENTE A inner join CLIENTE I

ON ( I.cd_cliente = A.cd_cliente_indicador)

Page 8: Elaboração de Consulta Continuação 7/abril/2006. Modelo

Auto-junção

Note os apelidos dados aos campos de saída

Page 9: Elaboração de Consulta Continuação 7/abril/2006. Modelo

JOIN ... ON/USING...CLIENTE CONTATO

1 , Maria

2 , Joelma

3 , Carlos

4 , Andre

Cd-cliente, cd-contato, nm_contatoCd-cliente, nm_cliente

1 , 1, Aldeny

1, 2, Jose

3, 1, Antonio

3, 2, Ildefonso

Maria, Aldeny

Maria, Jose

Carlos, Antonio

Carlos, Ildefonso

SELECT nm_cliente, nm_contato FROM cliente

INNER JOIN contato USING(cd_cliente)

Page 10: Elaboração de Consulta Continuação 7/abril/2006. Modelo

Junção Externa

• OUTER JOIN• É empregada quando há necessidade de

forçar nulos para aparecimento de alguns valores sem correspondência em uma das tabelas

• Três variações:– LEFT OUTER JOIN– RIGHT OUTER JOIN– FULL OUTER JOIN

Page 11: Elaboração de Consulta Continuação 7/abril/2006. Modelo

JOIN ... ON/USING...CLIENTE CONTATO

1 , Maria

2 , Joelma

3 , Carlos

4 , Andre

Cd-cliente, cd-contato, nm_contatoCd-cliente, nm_cliente

1 , 1, Aldeny

1, 2, Jose

3, 1, Antonio

3, 2, Ildefonso

Maria, Aldeny

Maria, Jose

Carlos, Antonio

Carlos, Ildefonso

Joelma, (null)

Andre, (null)

Listar todos os nomes de clientes e nomes de contatos, quem não tiver contato, deve aparecer !!!

Page 12: Elaboração de Consulta Continuação 7/abril/2006. Modelo

• Por que LEFT ?

• Sintaxe– SELECT ... FROM tab1 LEFT [OUTER] JOIN

tab2 ON ( tab1.cd = tab2.o_cd)

• JOIN : Trabalha-se as tabelas de 2 a 2

LEFT [OUTER] JOIN

Page 13: Elaboração de Consulta Continuação 7/abril/2006. Modelo

– SELECT ...

FROM tab1 LEFT [OUTER] JOIN tab2

ON ( tab1.cd = tab2.o_cd)

• Recuperar todos dados da 1ª tabela

(que precede o JOIN: tab1 ) mesmo que o dado de tab1 não tenha correspondência em tab2 : um nulo será forçado.

Ex. JOELMA (cliente) => ? (contato)

LEFT [OUTER] JOIN

Page 14: Elaboração de Consulta Continuação 7/abril/2006. Modelo

CLIENTE CONTATO

1 , Maria

2 , Joelma

3 , Carlos

4 , Andre

Cd-cliente, cd-contato, nm_contatoCd-cliente, nm_cliente

1 , 1, Aldeny

1, 2, Jose

3, 1, Antonio

3, 2, Ildefonso

Maria, Aldeny

Maria, Jose

Carlos, Antonio

Carlos, Ildefonso

Joelma,

Andre,

SELECT nm_cliente, nm_contato FROM cliente

LEFT [OUTER] JOIN contato USING(cd_cliente)

LEFT [OUTER] JOIN

Page 15: Elaboração de Consulta Continuação 7/abril/2006. Modelo

• Por que RIGHT ?

• SintaxeSELECT ... FROM tab1 RIGHT [OUTER] JOIN

tab2 ON ( tab1.cd = tab2.o_cd)

• Quando se deseja recuperar os todos dados da 2ª tabela ( que precede o JOIN) mesmo os dados de tab2 não tenham correspondência em tab1

RIGHT [OUTER] JOIN

Page 16: Elaboração de Consulta Continuação 7/abril/2006. Modelo

CLIENTECONTATO

1 , Maria

2 , Joelma

3 , Carlos

4 , Andre

Cd-cliente, cd-contato, nm_contatoCd-cliente, nm_cliente

1 , 1, Aldeny

1, 2, Jose

3, 1, Antonio

3, 2, Ildefonso

Maria, Aldeny

Maria, Jose

Carlos, Antonio

Carlos, Ildefonso

Joelma,

Andre,

SELECT nm_cliente, nm_contato FROM contato

RIGHT [OUTER] JOIN cliente USING(cd_cliente)

RIGHT [OUTER] JOIN

Page 17: Elaboração de Consulta Continuação 7/abril/2006. Modelo

auto junção com junção externa

• Liste todos os clientes e seus respectivos indicadores...

• Os clientes que não tem indicadores também devem aparecer ...

Page 18: Elaboração de Consulta Continuação 7/abril/2006. Modelo

FULL OUTER JOIN

• Recuperação de valores dos dois lados ( duas tabelas) sem descartar as não -correspondências

Page 19: Elaboração de Consulta Continuação 7/abril/2006. Modelo

JOIN• Caso 1: cd_aluno,

matricula têm mesmo domínio de valores

SELECT nm_aluno

FROM

aluno a INNER JOIN func f

ON a.cd_aluno = f.matricula

Apenas

- José

- André

01343, Maria01445, José04556, Carlos05300,Serafim20030, Jorge23922,Luiza25678, Valdir35876, André

30134, Ariane01445, José34056, Henri33420,Castro32310, Joao33222,Lair31228, Adir35976, André34584, Lea

Cd_aluno, nm_alunomatricula, nm_func

Aluno Func

Page 20: Elaboração de Consulta Continuação 7/abril/2006. Modelo

JOIN

Select nm_aluno, nm_funcionario FROM

Aluno a LEFT JOIN Func f

ON a.cd_aluno = f.matricula

Maria,

José, José

Carlos,

Serafim,

Jorge,

Luiza,

Valdir,

André, André

01343, Maria01445, José04556, Carlos05300,Serafim20030, Jorge23922,Luiza25678, Valdir35876, André

30134, Ariane01445, José34056, Henri33420,Castro32310, Joao33222,Lair31228, Adir35976, André34584, Lea

Cd_aluno, nm_alunomatricula, nm_func

Aluno Func

Page 21: Elaboração de Consulta Continuação 7/abril/2006. Modelo

FULL OUTER JOINSelect nm_aluno, nm_funcionario FROMAluno a FULL JOIN Func fON a.cd_aluno = f.matriculaMaria, José, JoséCarlos, Serafim, Jorge, Luiza,Valdir,André, André, , Ariane , Henri , Castro , Joao , Lair , Adir , Lea

01343, Maria01445, José04556, Carlos05300,Serafim20030, Jorge23922,Luiza25678, Valdir35876, André

30134, Ariane01445, José34056, Henri33420,Castro32310, Joao33222,Lair31228, Adir35976, André34584, Lea

Cd_aluno, nm_aluno

matricula, nm_func

Aluno Func