Pular para o conteúdo principal

Questão de Banco de Dados — SQL — FCC 2017

Banco de DadosSQL
Código
fc037993
Banca
FCC
Órgão
TRE-PR
Ano
2017
Nível
Médio
Cargo
Técnico Judiciário - Programação de Sistemas
Em um banco de dados aberto e em condições ideais, uma tabela chamada processo possui os registros abaixo.NumeroProcesso DataAbertura1279678-05.2016.1.00.0001 2016-12-264598765-03.2017.1.90.0002 2017-01-156789764-02.2016.1.80.0003 2016-03-309876534-05.2016.1.00.0000 2016-03-20Ao ser digitado um comando SQL, foi exibido na tela.NumeroProcesso DataAbertura6789764-02.2016.1.80.0003 2016-03-309876534-05.2016.1.00.0000 2016-03-20O comando digitado foi:
  1. ASELECT * FROM processo WHERE DataAbertura BETWEEN '2016-03-01' AND '2016-03-30';
  2. BSELECT NumeroProcesso, DataAbertura FROM processo WHERE DataAbertura BETWEEN ('2016-03- 01','2016-03-30');
  3. CSELECT * FROM processo WHERE DataAbertura>='2016-03-01' OR DataAbertura<='2016-03-30';
  4. DSELECT NumeroProcesso, DataAbertura FROM processo WHERE DataAbertura IN ('2016-03-20' AND '2016-03-30');
  5. ESELECT * FROM processo WHERE DataAbertura>'2016-03-20' AND DataAbertura<'2016-03-30';
Revelar gabarito e comentário

GabaritoA — SELECT * FROM processo WHERE DataAbertura BETWEEN '2016-03-01' AND '2016-03-30';

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 – Operador BETWEEN

Gabarito: letra A. O comando que exibe os dois registros com datas de março/2016 é o que utiliza o operador BETWEEN com os limites '2016-03-01' e '2016-03-30', pois ele retorna inclusive as datas limites – ou seja, '2016-03-30' está dentro do intervalo. As demais alternativas apresentam erro de sintaxe, lógica ou uso incorreto de operadores.

A questão testa o conhecimento do operador BETWEEN para filtro de datas no SQL. Conforme a documentação, o BETWEEN inclui os valores de início e fim do intervalo. A tabela fornecida possui quatro registros; o resultado esperado são os dois com data em março/2016.

PEGA ESSA DICA!

Lembre-se de que o BETWEEN é inclusivo (os limites fazem parte do resultado). Além disso, ele deve ser usado com a sintaxe coluna BETWEEN valor1 AND valor2 – sem parênteses, vírgulas ou operadores extras. Na dúvida, compare com a combinação equivalente: coluna >= valor1 AND coluna <= valor2.

Alternativa A — ✅ Correta ⟵ GABARITO

SELECT * FROM processo WHERE DataAbertura BETWEEN '2016-03-01' AND '2016-03-30';

Retorna todos os registros cuja DataAbertura esteja no intervalo de 1º a 30 de março de 2016, ambos inclusive. As datas '2016-03-20' e '2016-03-30' atendem, e as demais ('2016-12-26' e '2017-01-15') ficam de fora. Portanto, a saída corresponde exatamente ao resultado exibido.

Alternativa B — ❌ Incorreta

SELECT NumeroProcesso, DataAbertura FROM processo WHERE DataAbertura BETWEEN ('2016-03- 01','2016-03-30');

A sintaxe do BETWEEN exige a palavra-chave AND entre os dois valores, e não uma vírgula. Além disso, há um espaço indevido na data '2016-03- 01'. A consulta geraria erro de execução.

Alternativa C — ❌ Incorreta

SELECT * FROM processo WHERE DataAbertura>='2016-03-01' OR DataAbertura<='2016-03-30';

O operador OR faz com que a condição seja verdadeira se qualquer uma das partes for satisfeita. Como toda data é maior ou igual a '2016-03-01' OU menor ou igual a '2016-03-30' – na prática, todos os registros da tabela atendem a pelo menos uma condição –, o resultado incluiria as quatro linhas, e não apenas as duas desejadas.

Alternativa D — ❌ Incorreta

SELECT NumeroProcesso, DataAbertura FROM processo WHERE DataAbertura IN ('2016-03-20' AND '2016-03-30');

O operador IN espera uma lista de valores separados por vírgula, e não a palavra AND. A expressão ('2016-03-20' AND '2016-03-30') é inválida em SQL. O correto seria IN ('2016-03-20', '2016-03-30'), mas ainda assim não atenderia ao resultado (pois o resultado inclui uma data intermediária, não apenas as duas extremas). A consulta apresentada gera erro de sintaxe.

Alternativa E — ❌ Incorreta

SELECT * FROM processo WHERE DataAbertura>'2016-03-20' AND DataAbertura<'2016-03-30';

Os operadores > e < são estritos, ou seja, não incluem os limites. Assim, seriam retornados apenas registros com data estritamente entre '2016-03-20' e '2016-03-30'. Como o registro de '2016-03-20' e o de '2016-03-30' são exatamente os limites, eles seriam excluídos do resultado. A consulta não retornaria nenhuma linha, pois não há registro com data intermediária.

Gabarito: letra A

Link permanente: /questoes/fc037993