Pular para o conteúdo principal

Questão de Banco de Dados — SQL — FUNDATEC 2023

Banco de DadosSQL
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
Considere o esquema relacional que representa parte de um sistema de uma biblioteca:Livro(IdLivro,Titulo,Ano,#IdEditora)Editora(IdEditora, Nome)Assunto(IdAssunto, Descricao)LivroAssunto(#IdLivro,#IdAssunto)Legenda: Campos sublinhados compõem a chave primária da tabela e campo precedido de # é uma chave estrangeiraA coordenação de uma biblioteca deseja um relatório para ver os títulos de todos os livros e a quantidade de assuntos que eles abordam, mostrando apenas aqueles que tratam de mais de dois assuntos.Analise as alternativas de implementação dessa consulta e assinale a alternativa que expressa correta e eficientemente o que o relatório deve mostrar é:
  1. AImagem associada para resolução da questão
  2. BImagem associada para resolução da questão
  3. CImagem associada para resolução da questão
  4. DImagem associada para resolução da questão
  5. EImagem associada para resolução da questão
Revelar gabarito e comentário

GabaritoE — [imagem]

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

SQL: Consulta com GROUP BY e HAVING

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.

Alternativa A — ❌ Incorreta

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.

Alternativa B — ❌ Incorreta

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.

Alternativa C — ❌ Incorreta

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.

Alternativa D — ❌ Incorreta

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.

Alternativa E — ✅ Correta ⟵ GABARITO

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.

NÃO CAIA NESSA!

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