wayground logo

Free Printable Worksheets

NEW

Font size

S
M
L
XL
Worksheets

SQL - 1o.E Tech

Total questions: 20

Worksheet time: 10mins

Name
Class
Date
1.

Elabore uma consulta SQL que exiba a Cidade, o Nome da Agência, o maior e o menor saldo, juntamente com a contagem de contas com status 'Active' em cada agência.

a)

SELECT a.cidade, a.nome, MAX(c.saldo) AS maior_saldo, MIN(c.saldo) AS menor_saldo, COUNT(c.id) AS total_contas_ativas FROM agencia a JOIN conta c ON a.id = c.agencia_id WHERE c.status = 'Active' GROUP BY a.cidade, a.nome;

b)

SELECT a.cidade, a.nome, AVG(c.saldo) AS media_saldo, COUNT(c.id) AS total_contas FROM agencia a JOIN conta c ON a.id = c.agencia_id GROUP BY a.cidade, a.nome;

c)

SELECT a.cidade, MAX(c.saldo), MIN(c.saldo) FROM agencia a, conta c WHERE c.status = 'Active' GROUP BY a.cidade;

d)

SELECT a.nome, SUM(c.saldo) AS soma_saldo, COUNT(c.id) AS total_contas_ativas FROM agencia a JOIN conta c ON a.id = c.agencia_id WHERE c.status = 'Active' GROUP BY a.nome;

2.

Escreva uma consulta SQL para listar o nome do cliente, a cidade da agência e o valor médio dos empréstimos para todos os clientes que tenham pelo menos um empréstimo registrado. A consulta deve excluir os registros com empréstimos nulos.

a)

SELECT c.nome, ag.cidade, AVG(e.valor) AS media_emprestimo FROM cliente c JOIN emprestimo e ON c.id = e.cliente_id JOIN agencia ag ON e.agencia_id = ag.id WHERE e.valor IS NOT NULL GROUP BY c.nome, ag.cidade;

b)

SELECT c.nome, ag.cidade, SUM(e.valor) AS total_emprestimo FROM cliente c LEFT JOIN emprestimo e ON c.id = e.cliente_id JOIN agencia ag ON e.agencia_id = ag.id GROUP BY c.nome, ag.cidade;

c)

SELECT c.nome, ag.cidade, AVG(e.valor) AS media_emprestimo FROM cliente c JOIN emprestimo e ON c.id = e.cliente_id JOIN agencia ag ON e.agencia_id = ag.id GROUP BY c.nome, ag.cidade;

d)

SELECT c.nome, ag.cidade, AVG(e.valor) AS media_emprestimo FROM cliente c, agencia ag, emprestimo e WHERE e.valor IS NULL GROUP BY c.nome, ag.cidade;

3.

Escreva uma consulta SQL que exiba o nome do cliente, o valor de cada operação, e uma coluna que indique se o valor da operação está "Acima da Média" ou "Abaixo da Média". O cálculo de média deve considerar as operações por agência.

a)

SELECT c.nome, o.valor, CASE WHEN o.valor > (SELECT AVG(valor) FROM operacao op JOIN conta co2 ON op.conta_id = co2.id WHERE co2.agencia_id = cta.agencia_id) THEN 'Acima da Média' ELSE 'Abaixo da Média' END AS classificacao FROM cliente c JOIN conta cta ON c.id = cta.cliente_id JOIN operacao o ON cta.id = o.conta_id;

b)

SELECT c.nome, o.valor, CASE WHEN o.valor > AVG(o.valor) OVER (PARTITION BY c.id) THEN 'Acima da Média' ELSE 'Abaixo da Média' END AS classificacao FROM cliente c JOIN conta cta ON c.id = cta.cliente_id JOIN operacao o ON cta.id = o.conta_id;

c)

SELECT c.nome, o.valor, 'Acima da Média' AS classificacao FROM cliente c JOIN operacao o ON c.id = o.cliente_id;

d)

SELECT c.nome, o.valor, (SELECT CASE WHEN o.valor > AVG(o2.valor) THEN 'Acima da Média' ELSE 'Abaixo da Média' END FROM operacao o2) AS classificacao FROM cliente c JOIN conta cta ON c.id = cta.cliente_id JOIN operacao o ON cta.id = o.conta_id;

4.

Crie uma consulta SQL que exiba a cidade e o número de clientes que possuem cartões de crédito com limite acima da média dos empréstimos realizados naquela cidade. Considere apenas as cidades com, no mínimo, cinco clientes com cartões de crédito.

a)

SELECT cl.cidade, COUNT(DISTINCT ca.cliente_id) AS num_clientes FROM cliente cl JOIN cartao ca ON cl.id = ca.cliente_id WHERE ca.limite > (SELECT AVG(e.valor) FROM emprestimo e JOIN agencia a ON e.agencia_id = a.id WHERE a.cidade = cl.cidade) GROUP BY cl.cidade HAVING COUNT(DISTINCT ca.cliente_id) >= 5;

b)

SELECT cl.cidade, COUNT(ca.cliente_id) FROM cliente cl JOIN cartao ca ON cl.id = ca.cliente_id WHERE ca.limite > (SELECT AVG(valor) FROM emprestimo) GROUP BY cl.cidade HAVING COUNT(ca.cliente_id) > 5;

c)

SELECT cl.cidade, COUNT(DISTINCT ca.cliente_id) FROM cliente cl JOIN cartao ca ON cl.id = ca.cliente_id GROUP BY cl.cidade HAVING COUNT(DISTINCT ca.cliente_id) >= 5 AND ca.limite > (SELECT AVG(valor) FROM emprestimo);

d)

SELECT cl.cidade, COUNT(cl.id) FROM cliente cl JOIN cartao ca ON cl.id = ca.cliente_id WHERE ca.limite < (SELECT AVG(e.valor) FROM emprestimo e JOIN agencia a ON e.agencia_id = a.id WHERE a.cidade = cl.cidade) GROUP BY cl.cidade;

5.

Crie uma view chamada contas_dias_ativas que exiba o nome do cliente, a cidade da agência, a data de abertura da conta e o número total de dias que a conta está ativa (status 'Active'). Em seguida, conceda permissão de SELECT para o usuário DB_ADMIN, criando o usuário caso ele não exista.

a)

CREATE OR REPLACE VIEW contas_dias_ativas AS SELECT c.nome, ag.cidade, co.abertura, (CURRENT_DATE - co.abertura) AS dias_ativa FROM cliente c JOIN conta co ON c.id = co.cliente_id JOIN agencia ag ON co.agencia_id = ag.id WHERE co.status = 'Active';

CREATE USER DB_ADMIN; GRANT SELECT ON contas_dias_ativas TO DB_ADMIN;

b)

CREATE VIEW contas_dias_ativas (nome, cidade, abertura, dias_ativa) AS SELECT c.nome, ag.cidade, co.abertura, (CURRENT_DATE - co.abertura) FROM cliente c, conta co, agencia ag WHERE co.status = 'Inactive';

CREATE USER DB_ADMIN;

GRANT SELECT ON contas_dias_ativas TO DB_ADMIN;

c)

CREATE TABLE contas_dias_ativas AS SELECT c.nome, ag.cidade, co.abertura, (CURRENT_DATE - co.abertura) AS dias_ativa FROM cliente c JOIN conta co ON c.id = co.cliente_id JOIN agencia ag ON co.agencia_id = ag.id WHERE co.status = 'Active';

d)

CREATE VIEW contas_dias_ativas AS SELECT c.nome, ag.cidade, co.abertura FROM cliente c JOIN conta co ON c.id = co.cliente_id JOIN agencia ag ON co.agencia_id = ag.id;

CREATE USER DB_ADMIN;

GRANT ALL ON contas_dias_ativas TO DB_ADMIN;

6.

Qual conjunto de comandos SQL inicia uma transação, insere um novo cliente e, em seguida, desfaz completamente a inserção?

a)

BEGIN; INSERT INTO cliente (id, nome) VALUES ("C00011", "Novo Cliente"); COMMIT;

b)

START TRANSACTION; INSERT INTO cliente (id, nome) VALUES ("C00011", "Novo Cliente"); ROLLBACK;

c)

BEGIN TRANSACTION; INSERT INTO cliente (id, nome) VALUES ("C00011", "Novo Cliente"); SAVEPOINT A;

d)

COMMIT; INSERT INTO cliente (id, nome) VALUES ("C00011", "Novo Cliente"); ROLLBACK;

7.

Um desenvolvedor precisa garantir que uma transferência de R$ 200 da conta 'A00001' para a 'A00002' seja atômica (ou tudo acontece ou nada acontece). Qual é a abordagem correta?

a)

UPDATE conta SET saldo = saldo - 200 WHERE id = 'A00001'; UPDATE conta SET saldo = saldo + 200 WHERE id = 'A00002';

b)

START TRANSACTION; UPDATE conta SET saldo = saldo - 200 WHERE id = 'A00001'; UPDATE conta SET saldo = saldo + 200 WHERE id = 'A00002'; COMMIT;

c)

START TRANSACTION; UPDATE conta SET saldo = saldo - 200 WHERE id = 'A00001'; ROLLBACK; UPDATE conta SET saldo = saldo + 200 WHERE id = 'A00002'; COMMIT;

d)

UPDATE conta SET saldo = saldo - 200 WHERE id = 'A00001'; SAVEPOINT A; UPDATE conta SET saldo = saldo + 200 WHERE id = 'A00002';

8.

Qual consulta SQL lista todos os clientes e, para aqueles que possuem contas, exibe os IDs das contas? Clientes sem contas também devem aparecer na lista.

a)

SELECT c.nome, co.id FROM cliente c INNER JOIN conta co ON c.id = co.cliente_id;

b)

SELECT c.nome, co.id

FROM cliente c

LEFT JOIN conta co ON c.id = co.cliente_id;

c)

SELECT c.nome, co.id

FROM cliente c

RIGHT JOIN conta co ON c.id = co.cliente_id;

d)

SELECT c.nome, co.id

FROM cliente c

CROSS JOIN conta co;

9.

Como você encontraria os clientes que não possuem nenhum empréstimo registrado?

a)

SELECT c.nome

FROM cliente c

JOIN emprestimo e ON c.id = e.cliente_id;

b)

SELECT c.nome

FROM cliente c

LEFT JOIN emprestimo e ON c.id = e.cliente_id

WHERE e.id IS NULL;

c)

SELECT c.nome

FROM cliente c

LEFT JOIN emprestimo e ON c.id = e.cliente_id

WHERE e.id IS NOT NULL;

d)

SELECT c.nome

FROM cliente c

INNER JOIN emprestimo e ON c.id = e.cliente_id

WHERE e.id IS NULL;

10.

Qual consulta retorna o nome de cada cliente e o nome da agência associada à sua conta?

a)

SELECT c.nome, a.nome

FROM cliente c

JOIN conta co ON c.id = co.cliente_id

JOIN agencia a ON co.agencia_id = a.id;

b)

SELECT c.nome, a.nome

FROM cliente c, agencia a;

c)

SELECT c.nome, a.nome

FROM cliente c

LEFT JOIN agencia a ON c.cidade = a.cidade;

d)

SELECT c.nome, a.nome

FROM cliente c

JOIN conta co ON c.id = co.cliente_id

LEFT JOIN agencia a ON co.agencia_id = a.id;

11.

Qual comando cria uma VIEW chamada clientes_sp que mostra apenas o nome e a profissão dos clientes que moram em 'São Paulo'?

a)

CREATE TABLE clientes_sp AS

SELECT nome, profissao FROM cliente WHERE cidade = 'São Paulo';

b)

CREATE VIEW clientes_sp AS

SELECT nome, profissao FROM cliente WHERE cidade = 'São Paulo';

c)

CREATE VIEW clientes_sp (nome, profissao)

SELECT * FROM cliente WHERE cidade = 'São Paulo';

d)

UPDATE VIEW clientes_sp SET query =

SELECT nome, profissao FROM cliente WHERE cidade = 'São Paulo';

12.

Qual comando é usado para remover permanentemente uma VIEW chamada contas_inativas do banco de dados?

a)

DELETE FROM contas_inativas;

b)

DROP VIEW contas_inativas;

c)

ALTER VIEW contas_inativas DISABLE;

d)

REMOVE VIEW contas_inativas;

13.

Qual comando concede permissão para que um usuário chamado analista possa apenas ler (consultar) dados da tabela cliente?

a)

GRANT ALL ON cliente TO analista;

b)

GRANT SELECT ON cliente TO analista;

c)

ALLOW SELECT ON cliente TO analista;

d)

CREATE USER analista WITH SELECT ON cliente;

14.

Após conceder permissão de INSERT e UPDATE na tabela operacao para o usuário caixa, qual comando remove apenas a permissão de INSERT?

a)

REVOKE ALL ON operacao FROM caixa;

b)

DROP PERMISSION INSERT ON operacao FOR caixa;

c)

REVOKE INSERT ON operacao FROM caixa;

d)

DENY INSERT ON operacao TO caixa;

15.

Qual consulta lista o nome de todos os clientes que realizaram operações de 'Saque'?

a)

SELECT nome FROM cliente WHERE id IN (SELECT c.cliente_id FROM conta c JOIN operacao o ON c.id = o.conta_id WHERE o.tipo_operacao = 'Saque');

b)

SELECT nome FROM cliente WHERE id =

(SELECT cliente_id FROM conta WHERE tipo_operacao = 'Saque');

c)

SELECT nome FROM cliente c JOIN operacao o ON c.id = o.conta_id WHERE o.tipo_operacao = 'Saque';

d)

SELECT nome FROM cliente WHERE EXISTS

(SELECT * FROM operacao WHERE tipo_operacao = 'Deposito');

16.

Qual consulta retorna todas as contas cujo saldo é maior que o saldo médio de todas as contas ativas ('Active')?

a)

SELECT id, saldo FROM conta WHERE saldo > AVG(saldo) AND status = 'Active';

b)

SELECT id, saldo FROM conta WHERE saldo > (SELECT AVG(saldo) FROM conta WHERE status = 'Active');

c)

SELECT id, saldo FROM conta c1 WHERE saldo > (SELECT AVG(c2.saldo) FROM conta c2 WHERE c1.id = c2.id);

d)

SELECT id, saldo, (SELECT AVG(saldo) FROM conta) AS media FROM conta WHERE status = 'Active';

17.

Qual consulta exibe o nome dos clientes que possuem empréstimos com valor superior a R$ 150.000?

a)

SELECT nome FROM cliente WHERE id IN (SELECT cliente_id FROM emprestimo WHERE valor > 150000);

b)

SELECT nome FROM cliente c JOIN emprestimo e ON c.id = e.cliente_id WHERE e.valor < 150000;

c)

SELECT nome FROM cliente WHERE (SELECT valor FROM emprestimo WHERE cliente_id = cliente.id) > 150000;

d)

SELECT nome FROM cliente WHERE 150000 < ANY (SELECT valor FROM emprestimo WHERE cliente_id = cliente.id);

18.

Qual consulta SQL exibe o nome de cada agência localizada em 'São Paulo', o número total de contas (independente do status) e o saldo médio dessas contas por agência?

a)

SELECT a.nome, COUNT(c.id) AS total_contas, AVG(c.saldo) AS saldo_medio

FROM agencia a

JOIN conta c ON a.id = c.agencia_id

WHERE a.cidade = 'São Paulo'

GROUP BY a.nome;

b)

SELECT a.nome, COUNT(c.id), AVG(c.saldo)

FROM agencia a, conta c

WHERE a.cidade = 'São Paulo'

GROUP BY a.nome;

c)

SELECT a.nome, COUNT(c.id) AS total_contas, AVG(c.saldo) AS saldo_medio

FROM agencia a

LEFT JOIN conta c ON a.id = c.agencia_id

GROUP BY a.nome, a.cidade

HAVING a.cidade = 'São Paulo';

d)

SELECT a.nome, COUNT(c.id) AS total_contas, SUM(c.saldo) / COUNT(c.id) AS saldo_medio

FROM agencia a

JOIN conta c ON a.id = c.agencia_id

WHERE a.cidade = 'Campinas'

GROUP BY a.nome;

19.

Elabore uma consulta que liste o nome de cada cliente e o valor total que ele já sacou (tipo_operacao = 'Saque'). A lista deve incluir apenas clientes que realizaram pelo menos um saque e deve ser ordenada do maior valor sacado para o menor.

a)

SELECT c.nome, SUM(o.valor) AS total_sacado

FROM cliente c

JOIN conta co ON c.id = co.cliente_id

JOIN operacao o ON co.id = o.conta_id

WHERE o.tipo_operacao = 'Saque'

GROUP BY c.nome

ORDER BY total_sacado DESC;

b)

SELECT c.nome, SUM(o.valor) AS total_sacado

FROM cliente c

LEFT JOIN conta co ON c.id = co.cliente_id

LEFT JOIN operacao o ON co.id = o.conta_id

WHERE o.tipo_operacao = 'Saque'

GROUP BY c.nome;

c)

SELECT c.nome, AVG(o.valor) AS media_saque

FROM cliente c

JOIN conta co ON c.id = co.cliente_id

JOIN operacao o ON co.id = o.conta_id

GROUP BY c.nome

HAVING o.tipo_operacao = 'Saque'

ORDER BY media_saque DESC;

d)

SELECT c.nome, SUM(o.valor) AS total_sacado

FROM cliente c, conta co, operacao o

WHERE c.id = co.cliente_id AND co.id = o.conta_id AND o.tipo_operacao = 'Saque'

GROUP BY c.nome

ORDER BY SUM(o.valor) ASC;

20.

Qual consulta retorna o nome de cada tipo de conta (tipo_conta) e a quantidade de contas ativas ('Active') associadas a ele, mas apenas para os tipos de conta que têm mais de 3 contas ativas?

a)

SELECT tc.nome, COUNT(c.id) AS quantidade_ativas

FROM tipo_conta tc

JOIN conta c ON tc.id = c.tipo

WHERE c.status = 'Active'

GROUP BY tc.nome

HAVING COUNT(c.id) > 3;

b)

SELECT tc.nome, COUNT(c.id) AS quantidade_ativas

FROM tipo_conta tc

JOIN conta c ON tc.id = c.tipo

WHERE c.status = 'Active' AND COUNT(c.id) > 3

GROUP BY tc.nome;

c)

SELECT tc.nome, COUNT(c.id) AS quantidade_ativas

FROM tipo_conta tc

LEFT JOIN conta c ON tc.id = c.tipo

WHERE c.status = 'Active'

GROUP BY tc.nome

HAVING quantidade_ativas < 3;

d)

SELECT tc.nome, COUNT(c.id)

FROM tipo_conta tc

JOIN conta c ON tc.id = c.tipo

GROUP BY tc.nome

HAVING c.status = 'Active' AND COUNT(c.id) > 3;