Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — Quadrix 2024

Banco de DadosConsultas e Comandos em SQL
Código
qa630726
Banca
Quadrix
Órgão
IBICT
Ano
2024
Cargo
Tecno ( )
CREATE TABLE Autores ( AutorID INT AUTO_INCREMENT PRIMARY KEY, Nome VARCHAR(100), Email VARCHAR(100), InstituicaoID INT, FOREIGN KEY (InstituicaoID) REFERENCES Instituicoes(InstituicaoID) ); CREATE TABLE Revistas ( RevistaID INT AUTO_INCREMENT PRIMARY KEY, Nome VARCHAR(100), ISSN VARCHAR(20) ); CREATE TABLE Artigos ( ArtigoID INT AUTO_INCREMENT PRIMARY KEY, Titulo VARCHAR(255), Resumo TEXT, PalavrasChave VARCHAR(255), RevistaID INT, FOREIGN KEY (RevistaID) REFERENCES Revistas(RevistaID) ); CREATE TABLE Instituicoes ( InstituicaoID INT AUTO_INCREMENT PRIMARY KEY, Nome VARCHAR(100), Cidade VARCHAR(100), Pais VARCHAR(100) ); CREATE TABLE Autor_Artigo ( AutorID INT, ArtigoID INT, PRIMARY KEY (AutorID, ArtigoID), FOREIGN KEY (AutorID) REFERENCES Autores(AutorID), FOREIGN KEY (ArtigoID) REFERENCES Artigos(ArtigoID) ); Com relação ao código SQL acima, no SGBD MySQL, julgue o item a seguir.   Para que se mostre o número de artigos publicados por cada autor, pode‑se utilizar o comando a seguir. SELECT Autores.Nome AS NomeAutor, COUNT(*) AS NumeroArtigos FROM Autores INNER JOIN Autor_Artigo ON Autores.AutorID = Autor_Artigo.AutorID GROUP BY Autores.Nome;
  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoC — Certo

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”.

Consultas SQL: contagem de artigos por autor com GROUP BY

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.

Alternativa C — ✅ Certo ⟵ GABARITO

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