Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — VUNESP 2023

Banco de DadosConsultas e Comandos em SQL
Código
vu195624
Banca
VUNESP
Órgão
TJM SP
Ano
2023
Cargo
Tec CPDJ ( )
Considere a seguinte tabela de um banco de dados relacional:   Passagem (ID, Origem, Destino, Valor)   O comando SQL para obter a Origem e Destino para valores situados entre 200,00 e 1.000,00, ordenado pela Origem, é:
  1. ASELECT Origem, Destino       FROM Passagem       HAVING Valor BETWEEN (200.00; 1000.00);
  2. BSELECT Origem, Destino       FROM Passagem       ORDER BY Origem AND       (Valor >= 200.00 OR Valor <= 1000.00);
  3. CSELECT Origem, Destino       FROM Passagem       WHERE Origem ASC AND        Valor BETWEEN (200.00 <> 1000.00);
  4. DSELECT Origem, Destino       FROM Passagem       WHERE Valor BETWEEN (200.00 AND 1000.00)       ORDER BY Origem;
  5. ESELECT Origem, Destino       FROM Passagem       HAVING Origem ASC AND       Valor BETWEEN (200.00 UNTIL 1000.00);
Revelar gabarito e comentário

GabaritoD — SELECT Origem, Destino       FROM Passagem       WHERE Valor BETWEEN (200.00 AND 1000.00)       ORDER BY Origem;

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

Sintaxe do SELECT: WHERE, BETWEEN e ORDER BY

Gabarito: letra D. A consulta correta usa a cláusula WHERE para filtrar os registros com Valor entre 200,00 e 1.000,00 (via BETWEEN ... AND ...) e a cláusula ORDER BY Origem para ordenar o resultado pela coluna Origem — exatamente o que a alternativa D apresenta. As demais alternativas erram ao usar HAVING (que filtra grupos, não linhas), ORDER BY com condição booleana, ASC dentro do WHERE, ou sintaxes inexistentes como <> e UNTIL.

O comando SELECT é a instrução da linguagem SQL (DML/DQL) usada para consultar dados de uma ou mais tabelas. Sua estrutura básica é SELECT colunas FROM tabela [WHERE condição] [ORDER BY coluna]. A cláusula WHERE filtra as linhas da tabela antes de qualquer agrupamento ou ordenação, aplicando condições sobre os valores das colunas. Já a cláusula ORDER BY ordena o resultado final da consulta, por padrão em ordem ascendente (ASC), podendo ser descendente (DESC).

O operador BETWEEN é uma forma concisa de verificar se um valor está dentro de um intervalo inclusivo. A sintaxe correta é coluna BETWEEN valor_inferior AND valor_superior, que equivale a coluna >= valor_inferior AND coluna <= valor_superior. No caso, Valor BETWEEN 200.00 AND 1000.00 retorna as passagens cujo valor seja maior ou igual a 200,00 e menor ou igual a 1.000,00.

A cláusula HAVING, por sua vez, é utilizada para filtrar grupos de registros após a aplicação de GROUP BY, geralmente com funções de agregação (COUNT, SUM, AVG, etc.). Usar HAVING sem GROUP BY para filtrar linhas individuais é um erro conceitual — o filtro de linhas deve ser feito com WHERE. A banca explora exatamente essa confusão entre WHERE (filtra linhas) e HAVING (filtra grupos).

Na prática, para a tabela Passagem (ID, Origem, Destino, Valor), a consulta correta percorre todas as linhas, seleciona apenas aquelas cujo Valor está entre 200,00 e 1.000,00, e apresenta as colunas Origem e Destino ordenadas alfabeticamente pela Origem. Por exemplo, se houver passagens com valores 150,00, 250,00 e 1.200,00, apenas a de 250,00 aparecerá no resultado.

A pegadinha central desta questão é a troca de WHERE por HAVING e a invenção de sintaxes para o intervalo (;, <>, UNTIL). O candidato que não domina a função de cada cláusula tende a marcar uma alternativa com HAVING, mas o filtro de linhas exige WHERE. Guarde a fronteira: WHERE filtra linhas; HAVING filtra grupos; ORDER BY ordena o resultado — é nela que as alternativas se dividem.

Alternativa A — ❌ Incorreta

Usa HAVING para filtrar linhas individuais, o que é incorreto — HAVING serve para filtrar grupos após GROUP BY. Além disso, a sintaxe BETWEEN (200.00; 1000.00) é inválida: o BETWEEN exige a palavra-chave AND entre os limites, não ponto e vírgula.

Alternativa B — ❌ Incorreta

A cláusula ORDER BY não aceita expressões booleanas como Origem AND (Valor >= 200.00 OR Valor <= 1000.00). Além disso, a condição (Valor >= 200.00 OR Valor <= 1000.00) está logicamente errada, pois aceitaria qualquer valor (todo número é >= 200 OU <= 1000), e o filtro deveria usar AND (entre 200 e 1000), não OR.

Alternativa C — ❌ Incorreta

WHERE Origem ASC é inválido: ASC (ascendente) só pode ser usado com ORDER BY, não dentro do WHERE. Além disso, BETWEEN (200.00 <> 1000.00) usa o operador <> (diferente), que não faz parte da sintaxe do BETWEEN — o correto é BETWEEN 200.00 AND 1000.00.

Alternativa D — ✅ Correta ⟵ GABARITO

A consulta está sintaticamente e semanticamente correta: SELECT Origem, Destino seleciona as colunas pedidas; FROM Passagem indica a tabela; WHERE Valor BETWEEN (200.00 AND 1000.00) filtra as linhas cujo valor está no intervalo inclusivo entre 200,00 e 1.000,00; e ORDER BY Origem ordena o resultado pela coluna Origem em ordem ascendente (padrão).

Alternativa E — ❌ Incorreta

Usa HAVING para filtrar linhas (erro conceitual, como na alternativa A) e Origem ASC dentro do HAVING, o que é inválido — ASC só se aplica ao ORDER BY. Além disso, BETWEEN (200.00 UNTIL 1000.00) usa a palavra UNTIL, que não existe na sintaxe SQL — o correto é AND.

Gabarito: letra D

Link permanente: /questoes/vu195624