31
Banco de Dados Oracle Mostrar dados a partir de múltiplas tabelas

04 - Mostrar dados a partir de múltiplas tabelas.ppt

Embed Size (px)

Citation preview

Page 1: 04 - Mostrar dados a partir de múltiplas tabelas.ppt

Banco de Dados Oracle

Mostrar dados a partir de múltiplas tabelas

Page 2: 04 - Mostrar dados a partir de múltiplas tabelas.ppt

OBJETIVOS DO CAPÍTULO

1. Conhecer a relação entre as tabelas

2. Descrever os Tipos de Joins

Page 3: 04 - Mostrar dados a partir de múltiplas tabelas.ppt

Relação entre as Tabelas CODIGO SOBRENOME NOME COD_USUA COD_GERENTE COD_DEPTO SALARIO

------- --------------- --------------- -------- ----------- ---------- ----------

1 Velasquez Carmen cvelasqu 50 2500

2 Ngao LaDoris lngao 1 41 1450

3 Nagayama MCODIGOori mnagayam 1 31 1400

5 Ropeburn Audry aropebur 1 50 1550

6 Urguhart Molly murguhar 2 41 1200

12 Giljum Henry hgiljum 3 32 1490

14 Nguyen Mai mnguyen 3 34 1525

17 Smith George gsmith 6 41 94060

CODIGO NOME COD_REGIAO

------- --------------- ----------

31 Sales 1

32 Sales 2

34 Sales 4

41 Operations 1

50 Administration 1

CODIGO NOME

------- -------------------------

1 North America

2 South America

3 Africa / MCODIGOdle East

4 Asia

5 Europe

EMPREGADOEMPREGADO

DEPARTAMENTODEPARTAMENTO REGIAOREGIAO

Page 4: 04 - Mostrar dados a partir de múltiplas tabelas.ppt

SQL

SOBRENOME COD_DEPTO

--------------- ----------

Velasquez 50

Ngao 41

Nagayama 31

Ropeburn 50

Urguhart 41

Giljum 32

Nguyen 34

CODIGO NOME

------- ---------------

10 Finance

31 Sales

32 Sales

33 Sales

34 Sales

35 Sales

41 Operations

Mostrar dados a partir de tabelas relacionadas

EMPREGADOEMPREGADODEPARTAMENTODEPARTAMENTO

Page 5: 04 - Mostrar dados a partir de múltiplas tabelas.ppt

• Um join é uma query que combina linhas a partir de duas ou mais tabelas ou visões.

• O Oracle realiza um join sempre que múltiplas tabelas são consultadas nas query’s a partir da cláusula FROM

• A lista no select das consultas podem selecionar quaisquer colunas a partir destas tabelas. Se qualquer uma das tabelas possuem uma coluna com nome em comum, você você deve qualificar todas as referências desta colunas na query, como o nome da tabela antes das colunas para eliminar ambiguidade.

Joins

Page 6: 04 - Mostrar dados a partir de múltiplas tabelas.ppt

Joins

Condições no Join 

•Consutlas com joins devem conter condições com a cláusula WHERE que comparam duas colunas, cada uma de tabela diferente. Tal condição é chamada condição de join.

•Para executar um join, o Oracle combina pares de linhas, cada uma contendo linha de cada tabela, para que possa avaliar para VERDADE a condição de join. As colunas na condição de join não precisam aparecer também na lista do select.

Page 7: 04 - Mostrar dados a partir de múltiplas tabelas.ppt

Joins

• Para executar um join de três ou mais tabelas, o Oracle primeiro une duas das tabelas baseadas nas condições de join comparando suas colunas e então une o resultado para outra tabela baseada em condições de join contendo colunas das tabelas unidas e a nova tabela.

• O Oracle continua este processo até que todas as tabelas sejam unidas no resultado.

• O otimizador determina a ordem em que o Oracle une tabelas baseadas nas condições de join, índices nas tabelas e etc.

Page 8: 04 - Mostrar dados a partir de múltiplas tabelas.ppt

Joins

• Além de condições de joins, a claúsula WHERE de um join pode conter também outras condições que se referem as colunas de só uma tabela.

• Esta condições podem adicionar restrições as linhas retornadas pelo join da query.

Page 9: 04 - Mostrar dados a partir de múltiplas tabelas.ppt

Tipos de Joins

Existem quatro tipos de Joins: NoEquijoins

•Um noequijoins é uma condição contendo um operador de igualdade.

•Um noequijoins combina linhas que tem valores equivalentes para as colunas especificadas só que comparando a partir de uma região de dados, como se estivesse fazendo um IN ou um BETWEEN.

•Dependendo do algoritmo intermo o otimizado escolhe o join a executar.

Page 10: 04 - Mostrar dados a partir de múltiplas tabelas.ppt

Tipos de Joins

Equijoins

•Um equijoins é um join com uma condição contendo um operador igualdade.

•Um equijoin combina linhas que tem valores equivalentes para as colunas especificadas.

•Dependendo do algoritimo interno o otimizador escolhe o join a executar.

Page 11: 04 - Mostrar dados a partir de múltiplas tabelas.ppt

Tipos de Joins

Self Joins

•Um self join é um join de uma tabela com ela mesma.

•Esta tabela aplica duas vezes na cláusula FROM seguido por um alias na tabela que qualifica nomes de colunas na condição join.

•Para realizar um self join, o Oracle combina e retorna linhas da tabela que satisfaça a condição join.

Page 12: 04 - Mostrar dados a partir de múltiplas tabelas.ppt

Tipos de Joins

Outer Joins

•Um outer join extende o resultado de um join simples. •Um outer join retorna todas as linhas que satisfaçam a condição join e aquelas linha a partir de uma tabela que não satisfaçam a condição de join da outra tabela.

Page 13: 04 - Mostrar dados a partir de múltiplas tabelas.ppt

Tipos de Joins

Outer Joins (Continuação)

•Tais linhas não são retornadas pelo join simples . Para escrever uma consulta que realiza um outer join de tabelas A e B e retorna todas as linhas a partir de A deve-se aplicar o operador (+) para todas as colunas de B na condição join. para que todas as linhas em A que não tiver linha e B, o Oracle retorna null para qualquer lista selecionada contendo colunas de B.

Page 14: 04 - Mostrar dados a partir de múltiplas tabelas.ppt

Tipos de Joins

Produto Cartesiano 

•Se duas tabelas em um join não teve sua condição join escrita, o Oracle retorna um Produto Cartesiano, ou seja, o Oracle combina cada linha de uma tabela com cada linha da outra tabela.

•Um produto cartesiano permite gerar muitas linhas e raramente é usado. Por exemplo, o produto cartesiano de duas tabelasm cada uma com 100 linhas, tem 10000 linhas.

Page 15: 04 - Mostrar dados a partir de múltiplas tabelas.ppt

Equijoin• Mostrar linhas de duas ou mais tabela escrevendo uma

condição simples de ligação na cláusula WHERE.

• Especificação de ligação em uma consulta simples. EQUIJOIN (SIMPLE JOIN)

Page 16: 04 - Mostrar dados a partir de múltiplas tabelas.ppt

CODIGO NOME COD_DEPTO ------- ----------- --------- 1 Carmen 50 2 LaDoris 41 3 MCODIGOori 31 5 Audry 50 6 Molly 41 12 Henry 32 14 Mai 34 17 George 41 20 Chad 43 22 Eddie 44 24 Bela 45

CODIGO NOME COD_REGIAO------- --------- ---------- 10 Finance 1 31 Sales 1 32 Sales 2 33 Sales 3 34 Sales 4 35 Sales 5 41 Operations 1 42 Operations 2 43 Operations 3 44 Operations 4 45 Operations 5 50 Administration 1

EMPREGADOEMPREGADO DEPARTAMENTODEPARTAMENTO

Primary Foreign Key

Equijoin

Page 17: 04 - Mostrar dados a partir de múltiplas tabelas.ppt

Equijoin

SELECT TABELA.COLUNA, TABELA.COLUNA...FROM TABELA1, TABELA2...WHERE TABELA1.COLUNA = TABELA2.COLUNA;

Onde:TABELA.COLUNA: é a tabela e a coluna do dado que será retornado.TABELA1.COLUNA: é a condição dos joins ou relaçõesTABELA2.COLUNA: das tabelas juntas; o nome da tabelaDeverá aparecer antes que o nome da coluna.

Page 18: 04 - Mostrar dados a partir de múltiplas tabelas.ppt

SQL> select empregado.sobrenome,empregado.cod_depto, departamento.nome 2 from empregado, departamento 3 where empregado.cod_depto=departamento.codigo;

SOBRENOME COD_DEPTO NOME------------------------- ---------- -------------------Velasquez 50 AdministrationNgao 41 OperationsNagayama 31 SalesRopeburn 50 AdministrationUrguhart 41 OperationsGiljum 32 SalesNguyen 34 SalesSmith 41 OperationsNewman 43 OperationsChang 44 OperationsDancs 45 Operations

Equijoin

Page 19: 04 - Mostrar dados a partir de múltiplas tabelas.ppt

Equijoin

CODIGO NOME COD_REGIAO

------- --------------- ----------

31 Sales 1

32 Sales 2

34 Sales 4

41 Operations 1

50 Administration 1

CODIGO NOME

------- -------------------------

1 North America

2 South America

3 Africa / MCODIGOdle East

4 Asia

5 Europe

DEPARTAMENTODEPARTAMENTO REGIAOREGIAO

Page 20: 04 - Mostrar dados a partir de múltiplas tabelas.ppt

SQL> SELECT DISTINCT DEPTO.CODIGO "COD.DEPTO", 2 REG.CODIGO "CODIGO REGIAO", 3 REG.NOME "NOME REGIAO" 4 FROM DEPARTAMENTO DEPTO, REGIAO REG 5* WHERE DEPTO.COD_REGIAO=REG.CODIGO;

COD.DEPTO CODIGO REGIAO NOME REGIAO---------- ------------- --------------------------- 10 1 North America 31 1 North America 32 2 South America 33 3 Africa / MCODIGOdle East 34 4 Asia 35 5 Europe 41 1 North America 42 2 South America 43 3 Africa / MCODIGOdle East 44 4 Asia 45 5 Europe 50 1 North America45 Operations

Equijoin

Page 21: 04 - Mostrar dados a partir de múltiplas tabelas.ppt

Equijoin

SQL

SOBRENOME COD_DEPTO

--------------- ----------

Velasquez 50

Ngao 31

Nagayama 41

Ropeburn 50

Urguhart 41

Giljum 32

Nguyen 34

CODIGO NOME

------- ---------------

10 Finance

31 Sales

32 Sales

33 Sales

34 Sales

35 Sales

41 Operations

EMPREGADOEMPREGADO DEPARTAMENTODEPARTAMENTO

Page 22: 04 - Mostrar dados a partir de múltiplas tabelas.ppt

EquijoinExibir linhas de duas ou mais tabela escrevendo uma condição simples de ligação na cláusula WHERE.

SQL> SELECT EMPREGADO.SOBRENOME, EMPREGADO.COD_DEPTO, 2 DEPARTAMENTO.NOME 3 FROM EMPREGADO, DEPARTAMENTO 4 WHERE EMPREGADO.COD_DEPTO = DEPARTAMENTO.CODIGO 5* AND EMPREGADO.SOBRENOME = 'Smith‘;

SOBRENOME COD_DEPTO NOME------------- ---------- ------------------Smith 41 Operations

Page 23: 04 - Mostrar dados a partir de múltiplas tabelas.ppt

Non-EquijoinRetornar l inhas de uma tabela que tenha ligação direta com as linhas de uma outra tabela com um “NOEQUIJOIN”

SQL

GRADE LOSAL HISAL

---------- ---------- ----------

1 700 1200

2 1201 1400

3 1401 2000

4 2001 3000

5 3001 9999

EMPREGADOEMPREGADO SALGRADESALGRADE CODIGO NOME SALARIO

------- ----------- ----------

1 Carmen 2500

2 LaDoris 1450

3 MCODIGOori 1400

5 Audry 1550

6 Molly 1200

12 Henry 1490

14 Mai 1525

17 George 940

20 Chad 750

22 Eddie 800

24 Bela 860

Salário na tabela EMPEstá entre menor e maior salário na tabela SALGRADE

Page 24: 04 - Mostrar dados a partir de múltiplas tabelas.ppt

Non-Equijoin

Sintaxe:

SELECT TABELA.COLUNA, TABELA.COLUNA...FROM TABELA1, TABELA2...WHERE TABELA1.COLUNA BETWEEN TABELA2.COLUNAAND TABELA2.COLUNA2;

Page 25: 04 - Mostrar dados a partir de múltiplas tabelas.ppt

Non-EquijoinRetornando registros com Non-Equijoins

SQL> SELECT E.NOME, E.SALARIO,S.GRADE 2 FROM EMPREGADO E, SALGRADE S 3 WHERE E.SALARIO 4* BETWEEN S.LOSAL AND S.HISAL;

NOME SALARIO GRADE----------- ---------- ----------Molly 1200 1George 940 1Chad 750 1Eddie 800 1Bela 860 1MCODIGOori 1400 2LaDoris 1450 3Audry 1550 3Henry 1490 3Mai 1525 3Carmen 2500 4

11 linhas selecionadas.

Page 26: 04 - Mostrar dados a partir de múltiplas tabelas.ppt

Other Joins

CLIENTECLIENTE

SOBRENOME CODIGO

--------------- -------

Velasquez 1

Ngao 2

Nagayama 3

Ropeburn 5

Urguhart 6

Giljum 12

EMPREGADOEMPREGADO

COD_REPR NOME

---------- -------------------------

12 Unisports

14 OJ Atheletics

14 Delhi Sports

11 Womansport

15 Kam's Sporting Goods

15 Sportique

Muench Sports

Page 27: 04 - Mostrar dados a partir de múltiplas tabelas.ppt

Other Joins

Retornar linhas de uma tabela que não tenha ligação direta com as linhas de outra tabela com um “OUTER JOIN”Sintaxe:SELECT TABELA.COLUNA, TABELA.COLUNA...FROM TABELA1, TABELA2WHERE TABELA1.COLUNA = TABELA2.COLUNA(+)

OU

SELECT TABELA.COLUNA, TABELA.COLUNA...FROM TABELA1, TABELA2WHERE TABELA1.COLUNA (+) = TABELA2.COLUNA

ONDE:(+)é o operador para junção externa, ou seja, se um dado exitir somente em uma tabela, com esta símbolo será possível retorna esta linha faltando o outro valor

•Acrescente o símbolo OUTER JOIN seguido ao nome da tabela que não tem linhas correspondentes.

Page 28: 04 - Mostrar dados a partir de múltiplas tabelas.ppt

Other JoinsSQL> select empregado.sobrenome,empregado.codigo,cliente.nome 2 from empregado, cliente 3 where empregado.codigo(+) = cliente.cod_repr 4* order by empregado.codigo;

SOBRENOME CODIGO NOME--------------- ------- -------------------------------------Giljum 12 UnisportsGiljum 12 Futbol SonoraNguyen 14 OJ AtheleticsNguyen 14 Delhi Sports Womansport Kam's Sporting Goods Hamada Sport Ojibway Retail Sporta Russia Big John's Sports Emporium Kuhn's Sports Sportique

Page 29: 04 - Mostrar dados a partir de múltiplas tabelas.ppt

Other JoinsSQL> SELECT CLIENTE.CODIGO "COD CLIENTE", 2 CLIENTE.NOME "NOME CLIENTE", 3 PEDIDO.CODIGO "CODIGO PEDIDO" 4 FROM CLIENTE, PEDIDO 5 WHERE CLIENTE.CODIGO = PEDIDO.COD_CLIENTE(+);

COD CLIENTE NOME CLIENTE CODIGO PEDIDO----------- ------------------------------- ------------- 201 Unisports 1 201 Unisports 2 202 OJ Atheletics 3 203 Delhi Sports 4 204 Womansport 5 204 Womansport 6 204 Womansport 7 205 Kam's Sporting Goods 206 Sportique 207 Sweet Rock Sports 9 208 Muench Sports 10

Page 30: 04 - Mostrar dados a partir de múltiplas tabelas.ppt

Self Joins

EMPREGADO (Ger)EMPREGADO (Ger)

SOBRENOME COD_GERENTE

--------------- -----------

Ngao 1

Nagayama 1

Ropeburn 1

Urguhart 2

Giljum 3

Nguyen 3

Smith 6

EMPREGADO (Emp)EMPREGADO (Emp)

CODIGO SOBRENOME

------- ----------

1 Velasquez

2 Ngao

3 Nagayama

5 Ropeburn

6 Urguhart

12 Giljum

14 Nguyen

Page 31: 04 - Mostrar dados a partir de múltiplas tabelas.ppt

Self JoinsSQL> SELECT TRABALHADOR.SOBRENOME || ' trabalha para ' || 2 GERENTE.SOBRENOME "EMPREGADOS" 3 FROM EMPREGADO TRABALHADOR, EMPREGADO GERENTE 4 WHERE TRABALHADOR.COD_GERENTE=GERENTE.CODIGO;

EMPREGADOS----------------------------------------------------------Ngao trabalha para VelasquezNagayama trabalha para VelasquezRopeburn trabalha para VelasquezUrguhart trabalha para NgaoGiljum trabalha para NagayamaNguyen trabalha para NagayamaSmith trabalha para Urguhart10