FC ConcursosFC Concursos

Questão FC369491

Seja um banco de dados relacional especificado em SQL de uma empresa de correspondência entre clientes, instituições financeiras e empréstimos contratados por esses clientes nessas

Linguagem SQL

FGV · 2024

Seja um banco de dados relacional especificado em SQL de uma empresa de correspondência entre clientes, instituições financeiras e empréstimos contratados por esses clientes nessas instituições, previamente implementado em um banco de dados como a seguir:

 

OBS: Neste banco de dados, cadeias de caracteres (strings) são representadas envoltas em aspas simples.

 

Para fins de investigação, os auditores da empresa desejam saber os nomes dos clientes que contrataram empréstimos em todas as financeiras.

 

Assinale a consulta que apresenta o resultado desejado pelos auditores.

  1. select c.nome from tb_cliente c where exists ( select 1 from tb_emprestimo e where e.id_cliente = c.id_cliente )
  2. select c.nome from tb_cliente c where id_cliente = all ( select id_financeira from tb_emprestimo )
  3. select c.nome from tb_cliente c where not exists ( select id_financeira from tb_financeira except select e.id_financeira from tb_emprestimo e where e.id_cliente = c.id_cliente )
  4. select distinct c.nome from tb_financeira f natural join tb_emprestimo e full join tb_cliente c on c.id_cliente = e.id_cliente
  5. select distinct c.nome from tb_financeira natural join tb_emprestimo natural join tb_cliente c
Mostrar resposta e comentário

Gabarito

Certo

Comentário do professor

A consulta seleciona o nome dos clientes que contrataram empréstimos em todas as financeiras usando duas ideias: a subconsulta e a verificação de ausência de elementos.

A subconsulta faz: select id_financeira from tb_financeira except select e.id_financeira from tb_emprestimo e where e.id_cliente = c.id_cliente. Ela retorna o conjunto de id_financeira existentes no cadastro menos aqueles em que o cliente específico já fez empréstimo — ou seja, as financeiras que o cliente NÃO contratou.

O predicado NOT EXISTS verifica se esse conjunto é vazio. Assim, a condição implica \(\{id\_financeira\}_{tb\_financeira}\setminus\{id\_financeira\}_{emprestimo\_do\_cliente}=\emptyset\), isto é, não há financeiras faltantes: o cliente contratou em todas elas.

Quando a diferença é vazia, o cliente atende ao critério e seu nome é retornado.

Conteúdo do catálogo FC Concursos · Atualizado em

Continue aprendendo