12
Bases de Dados Junção de relações 2 IST DEI ▪ Bases de Dados Junção de relações Tipicamente usadas na cláusula from SQL oferece várias possibilidades • condição da junção – determina quais são os atributos a comparar tipo de junção – determina como é que os tuplos excedentes são tratados

Bases de Dados - ULisboaweb.ist.utl.pt/diogo.ferreira/bd/2008-2009/aula09.pdf · from loan inner join borrower on ... from loan natural inner join borrower IST DEI Bases de Dados

  • Upload
    vandung

  • View
    219

  • Download
    1

Embed Size (px)

Citation preview

Bases de Dados

Junção de relações

2IST ▪ DEI ▪ Bases de Dados

Junção de relações

� Tipicamente usadas na cláusula from

� SQL oferece várias possibilidades

• condição da junção – determina quais são os

atributos a comparar

• tipo de junção – determina como é que os tuplos

excedentes são tratados

3IST ▪ DEI ▪ Bases de Dados

Junção de relações – inner join

select *

from loan inner join borrower on

loan.loan_number = borrower.loan_number

4IST ▪ DEI ▪ Bases de Dados

Junção de relações – left outer join e right outer join

select *

from loan left outer join borrower on

loan.loan_number = borrower.loan_number

5IST ▪ DEI ▪ Bases de Dados

Junção de relações – natural inner join

select *

from loan natural inner join borrower

6IST ▪ DEI ▪ Bases de Dados

Junção de relações – natural outer join

select *

from loan natural right outer join borrower

7IST ▪ DEI ▪ Bases de Dados

Junção de relações – full outer join

select *

from loan full outer join borrower using (loan_number)

8IST ▪ DEI ▪ Bases de Dados

Junção de relações – exemplo

� Nomes dos clientes com conta ou empréstimo (mas

não ambos)

select customer_name

from (depositor natural full outer join borrower)

where account_number is null or loan_number is null

Bases de Dados

Exemplos de consultas SQL

10

Pergunta 1

� Obter os dados de todos os clientes

select * from customer;

11

Pergunta 2

� Nomes e cidades onde residem os clientes com

empréstimo

select distinct b.customer_name, c.customer_city

from borrower as b, customer as c

where b.customer_name = c.customer_name;

12

Pergunta 3

� Nomes e cidades dos clientes com empréstimo na

agência de Perryridge

select distinct c.customer_name, c.customer_city

from customer as c, borrower as b, loan as l

where c.customer_name = b.customer_name

and b.loan_number = l.loan_number

and l.branch_name = 'Perryridge';

13

Pergunta 4

� Números de todas as contas com saldo entre 700 e

900

select account_number

from account

where balance between 700 and 900;

14

Pergunta 5

� Nomes dos clientes que moram em ruas cujo nome

acaba em “Hill”

select customer_name

from customer

where customer_street like '%Hill';

15

Pergunta 6

� Nomes dos clientes com conta e empréstimo na

agência de Perryridge

select distinct b.customer_name

from borrower as b, loan as l

where b.loan_number = l.loan_number

and l.branch_name = 'Perryridge‘

and b.customer_name in

(select d.customer_name

from account as a, depositor as d

where a.account_number = d.account_number

and a.branch_name = 'Perryridge')

16

Pergunta 7

� Nomes dos clientes com contas na mesma agência

onde o cliente Hayes tem conta

select distinct d.customer_name

from depositor as d, account as a

where d.account_number = a.account_number

and a.branch_name in

(select a2.branch_name

from depositor as d2, account as a2

where d2.account_number = a2.account_number

and d2.customer_name = 'Hayes');

17

Pergunta 8

� Nomes das agências com activo superior a todas as

agências da cidade de Brooklyn

select branch_name

from branch

where assets > all

(select assets

from branch

where branch_city = 'Brooklyn');

18

Pergunta 9

� Nomes dos clientes com empréstimo na agência de

Perryridge, por ordem alfabética

select distinct customer_name

from borrower as b, loan as l

where b.loan_number = l.loan_number

and l.branch_name = 'Perryridge'

order by b.customer_name;

19

Pergunta 10

� Nomes das agências e número de clientes com conta

nessa agência

select a.branch_name, count(distinct d.customer_name)

from depositor as d, account as a

where d.account_number = a.account_number

group by a.branch_name;

20

Pergunta 11

� Nomes das agências e respectivo saldo médio, mas só

as agências com saldo médio superior a 700

select branch_name, avg(balance)

from account

group by branch_name

having avg(balance) > 700;

21

Pergunta 12

� Nome da agência (ou agências) com o maior saldo

médio

select branch_name

from account

group by branch_name

having avg(balance) >= all

(select avg(balance)

from account

group by branch_name);

22

Pergunta 13

� Número total de clientes do banco

select count(*) from customer;

23

Pergunta 14

� Saldo médio dos clientes que vivem na cidade de

Harrison e têm pelo menos 2 contas no banco

select avg(balance)

from depositor, account, customer

where depositor.customer_name = customer.customer_name

and depositor.account_number = account.account_number

and customer_city = 'Harrison'

group by depositor.customer_name

having count(distinct account.account_number) >= 2;

24

Pergunta 15

� Quem são os clientes com conta em todas as

agências da cidade de Brooklyn

select distinct customer_name

from depositor as d

where not exists (

(select branch_name

from branch

where branch_city = 'Brooklyn')

except

(select branch_name

from depositor as d2, account as a2

where d2.account_number = a2.account_number

and d2.customer_name = d.customer_name) );