Suponha que se deseja realizar a seguinte busca no banco de...

Próximas questões
Com base no mesmo assunto
Q1088357 Banco de Dados
Suponha que se deseja realizar a seguinte busca no banco de dados:
Encontrar todos os clientes que têm uma conta em todas as agências da cidade Belo Horizonte.
É correto afirmar que a consulta SQL que realiza essa busca é
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Alternativa correta: A

A questão pede para encontrarmos todos os clientes que possuem uma conta em todas as agências localizadas na cidade de Belo Horizonte. Para resolver essa questão, é necessário entender o conceito de subconsultas, o operador EXISTS, o operador NOT EXISTS e a cláusula EXCEPT no SQL.

O SQL é uma linguagem de consulta estruturada usada para gerenciar e manipular dados em bancos de dados relacionais. A cláusula EXCEPT é usada para retornar todas as linhas em uma consulta que não são retornadas em outra. Já o EXISTS é um operador que verifica a existência de um resultado em uma subconsulta, e NOT EXISTS faz o contrário, verifica a não existência.

Na alternativa correta (A), estamos selecionando os nomes dos clientes onde não existe nenhuma agência na cidade de Belo Horizonte que não tenha uma conta associada a esse cliente. Em outras palavras, estamos filtrando somente os clientes que têm contas em todas as agências da cidade de Belo Horizonte, exatamente conforme solicitado no enunciado.

O uso de select distinct garante que teremos uma lista sem duplicatas de nomes de clientes. A subconsulta interna seleciona todas as agências da cidade de Belo Horizonte e a subconsulta mais externa, que acompanha o NOT EXISTS, verifica se há alguma agência que não está associada ao cliente. Se essa subconsulta mais externa não retornar resultados (ou seja, se para todas as agências de Belo Horizonte existir uma conta associada ao cliente), então o cliente é incluído nos resultados.

Portanto, a alternativa A é a correta porque utiliza corretamente a lógica de NOT EXISTS com EXCEPT para filtrar clientes com contas em todas as agências de Belo Horizonte, que era exatamente o que o enunciado da questão pedia.

As demais alternativas são incorretas porque:

  • Alternativa B utiliza EXISTS em vez de NOT EXISTS, o que não atende ao requisito da questão de encontrar clientes com conta em todas as agências.
  • Alternativa C tem um erro de sintaxe, pois está usando where not in, que não é uma construção válida no SQL.
  • Alternativa D não faz a correta verificação de existência de contas em todas as agências, e também apresenta problemas de sintaxe e lógica na consulta.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

As alternativas A,B e C só mudam UMA PALAVRA, respectivamente not exists, exists e not in. A alternativa D apresenta um método diferente.

No SELECT interno buscamos todas as agencias em que o cliente tem conta.

No SELECT intermediário buscamos todas as agências de Belo Horizonte, exceto aquelas que o cliente tem conta.

Vamos imaginar um exemplo, Na cidade de BH temos 3 agencias X,Y,Z. João possui conta na agencia X e Maria possui conta em todas as 3 agências. No SELECT interno teremos como resultado {X} para João e {X,Y,Z} para Maria. No SELECT intermediário, teremos como resultado {Y,Z} para João e {} para Maria.

No SELECT externo, na letra a, com a cláusula NOT EXISTS, buscamos todos os clientes onde o SELECT intermediário não retornou nenhum resultado. Ou seja, retornará apenas Maria, que é a ideia aqui.

Na letra b, com a cláusula EXISTS, retornará João, que seria um resultado incorreto.

Na letra c, com a cláusula NOT IN, teoricamente teríamos a mesma resposta que a letra a, porém a cláusula NOT IN funciona diferente da NOT EXISTS quando temos valores NULL envolvidos, maiores explicações no link sqlinthewild.co.za/index.php/2010/02/18/not-exists-vs-not-in/

Claro que, na hora da prova essa análise, com tempo limitado seria bem mais precária e o chute provavelmente seria na letra D.

Gab. A

Qualquer erro, por favor me avise.

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo