Questão de Banco de Dados — Consultas e Comandos em SQL — Quadrix 2024
- Código
- qa630726
- Banca
- Quadrix
- Órgão
- IBICT
- Ano
- 2024
- Cargo
- Tecno ( )
- CCerto
- EErrado
GabaritoC — Certo
Gabarito: CERTO (letra C). A consulta apresentada está correta para mostrar o número de artigos publicados por cada autor: ela faz o INNER JOIN entre Autores e Autor_Artigo (a tabela associativa que liga autores a artigos), agrupa pelo nome do autor e conta as linhas resultantes com COUNT(*). O comando está sintaticamente válido no MySQL e produz exatamente o resultado pedido.
O comando SELECT com GROUP BY é a ferramenta padrão da linguagem SQL para agregar dados. No caso, queremos uma contagem por autor, e a estrutura é clássica: seleciona-se a coluna pela qual se agrupa (o nome do autor) e a função de agregação COUNT(*), que conta quantas linhas existem em cada grupo. O INNER JOIN com a tabela Autor_Artigo é necessário porque é nela que está o relacionamento entre autores e artigos — sem essa junção, não haveria como saber quais artigos pertencem a cada autor.
Vamos entender o fluxo da consulta com um exemplo concreto. Suponha que a tabela Autores tenha dois registros: Maria (AutorID 1) e João (AutorID 2). A tabela Autor_Artigo registra as publicações: Maria publicou os artigos 10 e 20, e João publicou apenas o artigo 30. O INNER JOIN combina cada autor com suas publicações, gerando três linhas: (Maria, artigo 10), (Maria, artigo 20) e (João, artigo 30). O GROUP BY Autores.Nome agrupa essas linhas em dois grupos — um para Maria (com 2 linhas) e um para João (com 1 linha). O COUNT(*) conta as linhas de cada grupo, resultando em Maria com 2 artigos e João com 1 artigo. Exatamente o que se espera.
Uma observação importante: a consulta usa GROUP BY Autores.Nome, e não GROUP BY Autores.AutorID. Isso é aceitável no MySQL, que permite agrupar por uma coluna não chave e selecionar outras colunas da mesma tabela sem erro. No entanto, se dois autores tivessem exatamente o mesmo nome, eles seriam agrupados juntos, e a contagem somaria os artigos de ambos. Para uma solução mais robusta, o ideal seria agrupar por Autores.AutorID (a chave primária), que é única para cada autor. Mas, para o propósito da questão — mostrar o número de artigos por autor —, a consulta apresentada está correta e funciona no MySQL.
A pegadinha que a banca poderia explorar aqui é a diferença entre INNER JOIN e LEFT JOIN. Se a consulta usasse LEFT JOIN, autores sem nenhum artigo ainda apareceriam no resultado, com contagem zero. Com INNER JOIN, apenas autores que têm pelo menos um artigo são listados. No enunciado, o INNER JOIN é usado, o que significa que autores sem publicações não aparecem no resultado. Isso não torna a consulta incorreta — ela simplesmente mostra apenas os autores que publicaram. A questão pede "o número de artigos publicados por cada autor", e a consulta atende a esse pedido, ainda que omita autores sem publicações.
Guarde o critério decisivo para esta questão: a combinação de INNER JOIN com a tabela associativa e GROUP BY com COUNT(*) é a forma canônica de contar ocorrências por categoria em SQL. É exatamente essa estrutura que a alternativa correta apresenta.
A consulta está correta. O INNER JOIN entre Autores e Autor_Artigo combina cada autor com seus artigos publicados (via a tabela associativa). O GROUP BY Autores.Nome agrupa os resultados por autor, e o COUNT(*) conta quantas linhas cada grupo possui, ou seja, quantos artigos cada autor publicou. A sintaxe é válida no MySQL, e o resultado é exatamente o número de artigos por autor. A consulta atende ao que o enunciado pede.
Gabarito: letra C (CERTO).
Link permanente: /questoes/qa630726