Questão de Banco de Dados — Consultas e Comandos em SQL — INSTITUTO AOCP 2025
Banco de Dados›Consultas e Comandos em SQL
Código
qa699039
Banca
INSTITUTO AOCP
Órgão
SEDUC RS
Ano
2025
Cargo
Prof ( )
Durante uma aula prática de banco de dados com alunos do ensino médio, a professora de informática propôs um exercício envolvendo a filtragem de dados em SQL (Structured Query Language). Nesse exercício, a professora forneceu a tabela “Alunos”, criada com o seguinte script: CREATE TABLE Alunos ( id_aluno INT PRIMARY KEY, nome VARCHAR(100), sexo CHAR(1), cidade VARCHAR(100), estado CHAR(2), media DECIMAL(3,1), ano INT ); Ela orientou os estudantes a montarem uma consulta SQL que retornasse os nomes das alunas (sexo feminino) que: • moram em Porto Alegre; • moram no estado RS; • foram aprovadas por média (média maior ou igual a 7,0); • e cursaram o ano de 2024. Após analisar as propostas dos alunos, a professora identificou que a consulta correta é
ASELECT nome FROM Alunos WHERE cidade = 'Porto Alegre' AND estado = 'RS' AND sexo = 'F' AND media >= 7.0 AND ano = 2024;
BSELECT nome FROM Alunos HAVING media >= 7.0 AND sexo = 'F' AND cidade = 'Porto Alegre' AND estado = 'RS' AND ano = 2024;
CSELECT nome FROM Alunos WHERE media <= 7.0 AND sexo = 'F' AND cidade = 'Porto Alegre' AND estado = 'RS' OR ano = 2024;
DSELECT nome FROM Alunos WHERE cidade = 'Porto Alegre' AND estado = 'RS' ORDER BY nome WHERE sexo = 'F' AND media >= 7.0 OR ano = 2024;
ESELECT nome FROM Alunos WHERE cidade = 'Porto Alegre' AND estado = 'RS' AND ano != 2024 AND sexo = 'F' AND media <= 7.0;
Revelar gabarito e comentário▾
GabaritoA — SELECT nome
FROM Alunos
WHERE cidade = 'Porto Alegre'
AND estado = 'RS'
AND sexo = 'F'
AND media >= 7.0
AND ano = 2024;
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: cláusula WHERE e filtragem de dados
Gabarito: letra A. A consulta correta usa a cláusula WHERE para filtrar as linhas da tabela Alunos com todas as condições combinadas por AND: cidade igual a 'Porto Alegre', estado igual a 'RS', sexo igual a 'F', média maior ou igual a 7.0 e ano igual a 2024. As demais alternativas apresentam erros de sintaxe ou de lógica, como usar HAVING sem GROUP BY, inverter o operador de comparação da média, usar OR indevidamente ou duplicar a cláusula WHERE.
A cláusula WHERE é o mecanismo fundamental do SQL para filtrar registros de uma tabela antes de qualquer agregação ou ordenação. Ela especifica as condições que cada linha deve satisfazer para ser incluída no resultado da consulta. No comando SELECT, a ordem lógica de execução das cláusulas é: FROM (define a tabela), WHERE (filtra as linhas), GROUP BY (agrupa), HAVING (filtra grupos), ORDER BY (ordena). A cláusula WHERE atua sobre linhas individuais, enquanto HAVING atua sobre grupos formados por GROUP BY. Usar HAVING sem GROUP BY é um erro de sintaxe na maioria dos SGBDs, pois não há grupos para filtrar.
Os operadores lógicos AND e OR combinam condições no WHERE. O AND exige que todas as condições sejam verdadeiras para a linha ser selecionada; o OR exige que pelo menos uma seja verdadeira. No enunciado, a professora pede alunas que atendam a todas as condições simultaneamente: sexo feminino, morar em Porto Alegre, morar no RS, média >= 7.0 e ano = 2024. Portanto, todas as condições devem ser unidas por AND. O uso de OR na alternativa C, por exemplo, faria com que alunas de qualquer cidade ou estado fossem incluídas, desde que tivessem ano = 2024, o que viola o requisito.
A comparação de média usa o operador >= (maior ou igual) para incluir exatamente a nota 7.0, conforme o critério de aprovação. O valor 7.0 é um número decimal, e no SQL a notação pode ser 7.0 ou 7.0 (ponto decimal). A alternativa A usa media >= 7.0, que está correto. A alternativa C usa media <= 7.0, que selecionaria alunas com média menor ou igual a 7.0, invertendo o critério. A alternativa E também usa media <= 7.0, além de ano != 2024, que exclui as alunas do ano correto.
A alternativa D apresenta um erro grave de sintaxe: ela usa ORDER BY nome e depois repete WHERE, o que é inválido. A cláusula ORDER BY deve vir depois do WHERE, e não pode haver dois WHERE na mesma consulta. Além disso, usa OR ano = 2024, o que novamente quebraria a exigência de todas as condições.
A alternativa B usa HAVING sem GROUP BY, o que é incorreto. A cláusula HAVING é usada para filtrar grupos de linhas após a agregação, e sem GROUP BY não há grupos. Além disso, ela não usa WHERE, então não filtra as linhas antes da agregação, o que é necessário para atender aos critérios.
Portanto, a única consulta que atende a todos os requisitos do enunciado, com sintaxe correta e lógica adequada, é a alternativa A.
1FROM (tabela)
2WHERE (filtra linhas)
3GROUP BY (agrupa)
4HAVING (filtra grupos)
5ORDER BY (ordena)
LEVEL · soulevel.com.br
Alternativa A — ✅ Correta ⟵ GABARITO
A consulta usa SELECT nome FROM Alunos e filtra com WHERE todas as condições exigidas, unidas por AND: cidade = 'Porto Alegre', estado = 'RS', sexo = 'F', media >= 7.0 e ano = 2024. A sintaxe está correta, a ordem das cláusulas é válida e a lógica atende exatamente ao que a professora pediu: retornar os nomes das alunas que moram em Porto Alegre, no RS, com média maior ou igual a 7.0 e que cursaram 2024.
Alternativa B — ❌ Incorreta
A alternativa B usa HAVING sem GROUP BY. A cláusula HAVING é destinada a filtrar grupos de linhas após a agregação (como GROUP BY), e sem ela a consulta é inválida na maioria dos SGBDs. Além disso, não há cláusula WHERE, então não há filtro de linhas individuais, o que é essencial para atender aos critérios. O correto seria usar WHERE para filtrar as linhas.
Alternativa C — ❌ Incorreta
A alternativa C usa media <= 7.0, que seleciona alunas com média menor ou igual a 7.0, invertendo o critério de aprovação (que é maior ou igual). Além disso, usa OR ano = 2024 no final, o que faz com que a condição ano = 2024 seja opcional, incluindo alunas de qualquer ano, desde que atendam às outras condições. Isso viola o requisito de que a aluna deve ter cursado 2024. O correto seria media >= 7.0 e AND ano = 2024.
Alternativa D — ❌ Incorreta
A alternativa D tem erro de sintaxe: usa ORDER BY nome e depois repete WHERE, o que é inválido. A cláusula ORDER BY deve vir após o WHERE, e não pode haver dois WHERE na mesma consulta. Além disso, usa OR ano = 2024, o que torna a condição do ano opcional, incluindo alunas de outros anos. O correto seria WHERE ... AND ano = 2024 ORDER BY nome.
Alternativa E — ❌ Incorreta
A alternativa E usa ano != 2024, que exclui as alunas que cursaram 2024, exatamente o oposto do que é pedido. Além disso, usa media <= 7.0, que seleciona alunas com média menor ou igual a 7.0, invertendo o critério de aprovação. O correto seria ano = 2024 e media >= 7.0.
NÃO CAIA NESSA!
A banca explora a inversão dos operadores de comparação e o uso indevido de OR e HAVING. Cuidado com media <= 7.0 (o correto é >=), ano != 2024 (o correto é =), OR no lugar de AND e HAVING sem GROUP BY. Esses são os erros clássicos que fazem o candidato marcar a alternativa errada.
PEGA ESSA DICA!
Para resolver questões de SQL, leia o enunciado e identifique todas as condições. Depois, verifique se cada condição está presente na consulta, se os operadores estão corretos (>=, =, AND) e se a sintaxe está válida (ordem das cláusulas, sem HAVING sem GROUP BY). Monte uma tabela mental com as condições e confira uma a uma.