← Questões de Banco de Dados

Banco de Dados · FGV · 2022

Questão comentada de Banco de Dados

No contexto do MySQL, o comando SQL que produz um desfecho diferente dos demais é:

Gabarito: D

Em SQL, a ordem lógica de execução importa muito: primeiro o WHERE filtra linhas, depois vem o GROUP BY para agrupar, e só então o HAVING filtra os grupos. Parece detalhe, mas é justamente aí que as bancas adoram colocar a armadilha. No MySQL, depois de agrupar, voce pode ordenar por uma expressão, por alias da coluna calculada ou até pela posição da coluna no SELECT. Nas alternativas A, B, C e E, a lógica geral está correta: o agrupamento ocorre por País, o HAVING filtra apenas os grupos com contagem maior que 5, e o ORDER BY referencia corretamente a contagem, seja por expressão, alias ou posição. Isso é compatível com o funcionamento do MySQL, que aceita essas formas de ordenação. A letra D foge da regra porque usa WHERE count(*) > 5 depois do GROUP BY. Isso não fecha com a lógica do SQL: o WHERE não trabalha com resultado agregado de grupos, e sim com linhas antes da agregação. Para esse tipo de filtro, o comando certo é HAVING, não WHERE. Em prova, pense assim: WHERE filtra a matéria-prima; HAVING filtra o bolo pronto.

Continue treinando

Questões relacionadas