Você está na página 1de 3

Fundamentos de Bases de Dados

Actividade Formativa - Caso dos Bancos - comando Select SQL

1) Comparação de conjuntos: clausulas some/any, all


a) Listar os n_balcão que têm activos maiores que algum balcão localizado em Lisboa
SELECT balcão.n_balcão
FROM balcão
WHERE balcão.activo > SOME (SELECT activo
FROM balcão
WHERE cidade_balcão = 'Lisboa')

b) Listar os balcões com activos maiores que todos (qualquer) os activos localizados no
Porto
SELECT n_balcão
FROM balcão
WHERE activo > ALL (SELECT activo
FROM balcão
WHERE cidade_balcão = 'Porto')

2) Teste de relações vazias: clausula Exists


a) Listar todos os clientes que tenham empréstimos e depósitos no balcão 10
(intersecção)
SELECT cliente.nome_cliente
FROM cliente
WHERE exists (select *
from deposito
where cliente.nome_cliente = deposito.nome_cliente
and deposito.n_balcão=10)
AND exists (select *
from emprestimo
where cliente.nome_cliente = emprestimo.nome_cliente
and emprestimo.n_balcão=10)

b) Listar os clientes que tenham conta no balcão 10 mas não tenham empréstimo
(diferença)
SELECT cliente.nome_cliente
FROM cliente
WHERE exists (select *
from deposito
where cliente.nome_cliente = deposito.nome_cliente
and deposito.n_balcão=10)
AND not exists (select *
from emprestimo
where cliente.nome_cliente = emprestimo.nome_cliente
and emprestimo.n_balcão=10)
c) Listar os clientes que tenham conta em todos os balcões de Setúbal
SELECT DISTINCT nome_cliente
FROM deposito S
WHERE (NOT EXISTS (SELECT balcão.n_balcão
FROM balcão
WHERE balcão.cidade_balcão="Setúbal"
AND balcão.n_balcão NOT IN (SELECT n_balcão
FROM deposito T
WHERE S.nome_cliente =
T.nome_cliente))
)
AND
(
EXISTS (SELECT *
FROM balcao b
WHERE b.cidade_balcao = "Setúbal"
)

3) Ordenando a listagem dos tuplos: order by


a) Listar por ordem alfabética todos os clientes que tenham empréstimos no balcão 10
SELECT nome_cliente
FROM emprestimo
WHERE n_balcão=10
ORDER BY nome_cliente;

b) Listar por ordem descendente o valor do empréstimo, se alguns empréstimos tiverem


o mesmo valor, ordenar por número do empréstimo de forma ascendente
SELECT nome_cliente, valor, n_emprestimo
FROM emprestimo
ORDER BY valor DESC, n_emprestimo;

4) Funções agregadas: avg, min, max, sum, count


a) Listar o saldo médio em cada balcão
SELECT n_balcão, avg(saldo) AS saldo_medio
FROM deposito
GROUP BY n_balcão;

b) Listar o número de depositantes em cada balcão


SELECT n_balcão, count(n_balcão) AS depositantes
FROM deposito
GROUP BY n_balcão

c) Listar o saldo médio em cada balcão para valores de saldo médio superiores a 10.000
SELECT n_balcão, avg(saldo)
FROM deposito
GROUP BY n_balcão
HAVING avg(saldo)>10000;
d) Listar o balcão (ou balcões) com o maior saldo médio
SELECT deposito.n_balcão, Avg(deposito.saldo) AS MédiaDesaldo
FROM deposito
GROUP BY deposito.n_balcão
HAVING Avg(deposito.saldo)>= ALL ( SELECT Avg(deposito.saldo)
FROM deposito
GROUP BY deposito.n_balcão);

e) Listar a média dos saldos de todas as contas


SELECT avg(saldo) AS saldo_medio
FROM deposito;

f) Listar o número de clientes


SELECT Count(*) AS n_clientes
FROM cliente;

g) Listar os balcões com saldo médio maior do que o saldo médio de todas as contas
SELECT n_balcão
FROM deposito
GROUP BY n_balcão
HAVING avg(saldo) >= ALL ( SELECT avg(saldo)
FROM deposito
GROUP BY n_balcão)

Você também pode gostar