Bases de Dados Junção de relações 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 2
Junção de relações inner join select * from loan inner join borrower on loan.loan_number = borrower.loan_number 3 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 4
Junção de relações natural inner join select * from loan natural inner join borrower 5 Junção de relações natural outer join select * from loan natural right outer join borrower 6
Junção de relações full outer join select * from loan full outer join borrower using (loan_number) 7 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 8
Bases de Dados Exemplos de consultas SQL Pergunta 1 Obter os dados de todos os clientes select * from customer; 10
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; 11 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'; 12
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; 13 Pergunta 5 Nomes dos clientes que moram em ruas cujo nome acaba em Hill select customer_name from customer where customer_street like '%Hill'; 14
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') 15 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'); 16
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'); 17 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; 18
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; 19 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; 20
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); 21 Pergunta 13 Número total de clientes do banco select count(*) from customer; 22
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; 23 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) ); 24