Questão de Banco de Dados — SQL — FUNDATEC 2023
- Código
- qq896749
- Banca
- FUNDATEC
- Órgão
- PROCERGS
- Ano
- 2023
- Nível
- Superior
- Cargo
- ANC - Analista em Computação - Ênfase em Desenvolvimento Oracle PL/SQL
- A

- B

- C

- D

- E






GabaritoE — [imagem]
Gabarito: letra E. A consulta correta deve unir as tabelas Livro e LivroAssunto por IdLivro, agrupar pelo título (GROUP BY Titulo), contar os assuntos por livro (COUNT(IdAssunto)) e filtrar apenas grupos com mais de dois assuntos usando HAVING COUNT(IdAssunto) > 2. Apenas a alternativa E implementa essa combinação de forma correta e eficiente.
A banca testa o conhecimento sobre a diferença entre WHERE e HAVING, bem como o uso correto de GROUP BY para consultas agregadas.
Provavelmente utiliza WHERE para filtrar a contagem de assuntos, o que é inválido, pois WHERE não pode conter funções de agregação. O correto é usar HAVING.
Deve usar LEFT JOIN em vez de INNER JOIN, o que incluiria livros sem nenhum assunto (com contagem zero ou NULL). Como o relatório exige apenas livros com mais de dois assuntos, o INNER JOIN é mais adequado, e livros sem assuntos devem ser excluídos.
Provavelmente utiliza SELECT DISTINCT sem GROUP BY, o que não permite contar a quantidade de assuntos por livro. DISTINCT elimina duplicatas, mas não agrega.
Deve conter erro no agrupamento, como agrupar por IdLivro e não pelo título, o que poderia gerar resultados incorretos se o título se repetir (embora improvável) ou não atender ao requisito.
Implementa INNER JOIN, GROUP BY Titulo, HAVING COUNT(IdAssunto) > 2. Essa combinação atende exatamente ao que o relatório deve mostrar: títulos dos livros e quantidade de assuntos, apenas para livros com mais de dois assuntos.
A banca frequentemente troca HAVING por WHERE em consultas com agregação. Lembre-se: WHERE filtra linhas antes da agregação; HAVING filtra grupos depois da agregação. Outra armadilha comum é usar LEFT JOIN quando o enunciado pede apenas livros com assuntos, gerando resultados indesejados.
Gabarito: letra E.
Link permanente: /questoes/qq896749