Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — CESPE / CEBRASPE 2024

Banco de DadosConsultas e Comandos em SQL
Código
ce403652
Banca
CESPE / CEBRASPE
Órgão
CAGEPA
Ano
2024
Cargo
Tec ( )

Um técnico em eletrônica de certa empresa utiliza um sistema de banco de dados que registra, em horários específicos, medidas de temperatura, pressão e umidade em um processo realizado pela empresa. A tabela a seguir apresenta parte desse banco de dados, em determinado período de tempo.

idnometipovalor

data_leitura

1sensor01temperatura45.5

2024-07-20 10:00:00

2sensor02pressão101.3

2024-07-20 10:05:00

3sensor03temperatura55.2

2024-07-20 10:10:00

4sensor04umidade35.7

2024-07-20 10:15:00

5sensor05temperatura50.0

2024-07-20 10:20:00

6sensor06pressão99.5

2024-07-20 10:25:00

7sensor07umidade40.2

2024-07-20 10:30:00

8sensor08temperatura47.5

2024-07-20 10:35:00

9sensor09pressão102.4

2024-07-20 10:40:00

10sensor10umidade36.0

2024-07-20 10:45:00

 

A fim de fazer uma pesquisa na tabela apresentada, esse técnico escreveu o seguinte script SQL.

 

SELECT * FROM Sensores

WHERE (nome = 'sensor03' OR nome = 'sensor05')

AND valor BETWEEN 46.0 AND 54.0;

 

Com base na situação apresentada, assinale a opção que corresponde à correta execução do script SQL escrito pelo técnico.

  1. Aid: 5, nome: sensor05, tipo: temperatura, valor: 50.0, data_leitura: 2024-07-20 10:20:00
  2. Bid: 3, nome: sensor03, tipo: temperatura, valor: 55.2, data_leitura: 2024-07-20 10:10:00
  3. Cid: 8, nome: sensor08, tipo: temperatura, valor: 47.5, data_leitura: 2024-07-20 10:35:00
  4. Did: 3, nome: sensor03, tipo: temperatura, valor: 55.2, data_leitura: 2024-07-20 10:10:00 e id: 5, nome: sensor05, tipo: temperatura, valor: 50.0, data_leitura: 2024-07-20 10:20:00
  5. Eid: 1, nome: sensor01, tipo: temperatura, valor: 45.5, data_leitura: 2024-07-20 10:00:00
Revelar gabarito e comentário

GabaritoA — id: 5, nome: sensor05, tipo: temperatura, valor: 50.0, data_leitura: 2024-07-20 10:20:00

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

SQL – Cláusula WHERE com operadores lógicos e BETWEEN

Gabarito: letra A. A consulta retorna apenas o registro do sensor05 (id 5), pois é o único que atende simultaneamente às duas condições: o nome é 'sensor03' OU 'sensor05' E o valor está entre 46.0 e 54.0. O sensor03 tem valor 55.2, que está fora do intervalo, e os demais sensores não atendem à condição do nome.

A cláusula WHERE é o coração da consulta SQL: é ela que filtra as linhas da tabela antes de qualquer projeção. No comando apresentado, temos uma combinação de operadores lógicos (OR e AND) e um operador de intervalo (BETWEEN). A precedência dos operadores lógicos em SQL é fundamental: o operador AND tem precedência sobre o OR. Isso significa que, sem parênteses, a expressão A OR B AND C seria interpretada como A OR (B AND C). No entanto, o script usa parênteses para agrupar a condição do nome: (nome = 'sensor03' OR nome = 'sensor05'). Com isso, a consulta primeiro verifica se o nome é um dos dois sensores e, em seguida, aplica o filtro de valor. O resultado é a interseção dessas duas condições.

O operador BETWEEN é inclusivo, ou seja, valor BETWEEN 46.0 AND 54.0 equivale a valor >= 46.0 AND valor <= 54.0. Portanto, o valor 50.0 do sensor05 está dentro do intervalo, enquanto o valor 55.2 do sensor03 está fora. O sensor01, com valor 45.5, também está fora, e os demais sensores (sensor02, sensor04, etc.) não têm o nome esperado. A pegadinha da questão está em verificar cada registro individualmente, sem se deixar levar pela condição do nome que parece ampla, mas que, combinada com o intervalo, restringe o resultado a um único registro.

Na prática, para resolver essa questão, basta percorrer a tabela e aplicar as condições. O sensor03 (id 3) tem nome 'sensor03', mas valor 55.2, que não está entre 46.0 e 54.0. O sensor05 (id 5) tem nome 'sensor05' e valor 50.0, que está dentro do intervalo. Nenhum outro sensor atende à condição do nome. Portanto, o resultado é exatamente o registro do sensor05.

A distinção crucial aqui é entre a condição do nome (que usa OR) e a condição do valor (que usa AND). A banca explora a confusão entre essas duas condições: o candidato pode pensar que o OR amplia o resultado para ambos os sensores, mas o AND com o BETWEEN restringe ainda mais. O parêntese garante que a condição do nome seja avaliada primeiro, mas mesmo sem ele, a precedência do AND faria com que o resultado fosse o mesmo, pois apenas o sensor05 atende às duas condições simultaneamente.

Guarde o critério: para uma linha ser retornada, ela deve satisfazer a condição do nome (ser sensor03 ou sensor05) E a condição do valor (estar entre 46.0 e 54.0). É exatamente essa combinação que separa a alternativa correta das demais.

  1. 1Filtrar nome (sensor03 OU sensor05)
  2. 2Filtrar valor (BETWEEN 46.0 e 54.0)
  3. 3Interseção das condições (AND)
  4. 4Resultado: sensor05 (valor 50.0)
LEVEL · soulevel.com.br

Alternativa A — ✅ Correta ⟵ GABARITO

Esta alternativa apresenta exatamente o registro do sensor05 (id 5), com valor 50.0, que está dentro do intervalo de 46.0 a 54.0. O nome 'sensor05' atende à condição do OR, e o valor atende à condição do BETWEEN. Portanto, é o único registro que satisfaz todas as condições do WHERE.

Alternativa B — ❌ Incorreta

Apresenta o registro do sensor03 (id 3), mas o valor 55.2 está fora do intervalo BETWEEN 46.0 AND 54.0. Embora o nome 'sensor03' atenda à condição do OR, a condição do valor não é satisfeita, então o registro não é retornado.

Alternativa C — ❌ Incorreta

Apresenta o registro do sensor08 (id 8), com valor 47.5. Embora o valor esteja dentro do intervalo, o nome 'sensor08' não atende à condição nome = 'sensor03' OR nome = 'sensor05'. Portanto, o registro é excluído pela condição do nome.

Alternativa D — ❌ Incorreta

Apresenta os registros do sensor03 e do sensor05. O sensor05 atende a todas as condições, mas o sensor03 tem valor 55.2, que está fora do intervalo. Como a condição do valor é obrigatória (AND), o sensor03 não deve ser retornado. A consulta retorna apenas o sensor05.

Alternativa E — ❌ Incorreta

Apresenta o registro do sensor01 (id 1), com valor 45.5. O nome 'sensor01' não atende à condição do OR, e o valor 45.5 está fora do intervalo BETWEEN 46.0 AND 54.0. Portanto, o registro não é retornado por nenhuma das condições.

NÃO CAIA NESSA!

A banca explora a combinação de operadores lógicos. O candidato pode ser tentado a incluir o sensor03 por causa do OR, esquecendo que o AND com o BETWEEN exige que o valor também esteja no intervalo. A precedência dos operadores e o uso de parênteses são cruciais: a condição do nome é avaliada primeiro, mas o resultado final depende da interseção com a condição do valor. Com treino, você enxerga essas combinações de longe 💪.

PEGA ESSA DICA!

Para resolver questões de SQL com WHERE, identifique primeiro as condições independentes (nome, valor, etc.) e depois verifique como elas se combinam (AND, OR). Lembre-se de que BETWEEN é inclusivo e que o AND tem precedência sobre o OR. Monte uma tabela mental com os registros e aplique cada condição passo a passo.

Gabarito: letra A

Link permanente: /questoes/ce403652