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
vu195611
Banca
VUNESP
Órgão
TJ RS
Ano
2023
Cargo
TTI ( )
Acerca de bancos de dados relacionais, considere a seguinte situação:   Em um SGBD MySQL versão 5.6 há a tabela “Processo” contendo as seguintes colunas: "ID" , do tipo INT e "Data_Julgamento", do tipo DATE.   Assinale a alternativa que apresenta o comando SQL que retorna a quantidade total de julgamentos realizados no ano de 2022.
  1. ASELECT COUNT(ID) FROM Processo WHERE      Data_Julgamento IN ('2022-01-01', '2022-31-12')
  2. BSELECT COUNT(ID) FROM Processo WHERE    MONTH(Data_Julgamento) = 2022
  3. CSELECT COUNT(ID) FROM Processo WHERE    Data_Julgamento LIKE '2022-%'
  4. DSELECT COUNT(ID) FROM Processo WHERE    Data_Julgamento = '2022'
  5. ESELECT COUNT(ID) FROM Processo WHERE    YEAR(Data_Julgamento) BETWEEN '2022' AND    '2023'
Revelar gabarito e comentário

GabaritoC — SELECT COUNT(ID) FROM Processo WHERE    Data_Julgamento LIKE '2022-%'

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: filtrando por ano em colunas DATE

Gabarito: letra C. A consulta correta usa o operador LIKE com o padrão '2022-%' para selecionar todas as datas cujo ano é 2022, contando-as com COUNT(ID). As demais alternativas ou usam sintaxe inválida, comparam a coluna DATE com uma string incompleta, ou filtram por um intervalo incorreto.

O problema central é entender como comparar uma coluna do tipo DATE com um ano específico em MySQL. Uma coluna DATE armazena data e hora completas (no formato YYYY-MM-DD). Para filtrar por um ano, você precisa de uma estratégia que considere apenas a parte do ano da data. A alternativa C faz isso de forma elegante: como a coluna Data_Julgamento é do tipo DATE, o MySQL a converte implicitamente para string no formato 'YYYY-MM-DD' quando comparada com um padrão LIKE. O padrão '2022-%' casa com qualquer string que comece com '2022-', ou seja, qualquer data do ano de 2022. Essa é uma técnica comum e eficiente.

Outra abordagem, também válida, seria usar a função YEAR(): WHERE YEAR(Data_Julgamento) = 2022. Essa função extrai o ano da data e compara com o valor inteiro 2022. A alternativa E tenta usar essa função, mas com um erro: BETWEEN '2022' AND '2023' incluiria também o ano de 2023, o que não atende ao requisito de "ano de 2022". Além disso, comparar o resultado de YEAR() (que é um número inteiro) com strings '2022' e '2023' pode funcionar por conversão implícita, mas o intervalo está errado.

A alternativa A tenta usar IN com uma lista de datas, mas a sintaxe está incorreta: '2022-31-12' não é uma data válida (o formato correto é '2022-12-31'). Mesmo que estivesse correta, listar apenas o primeiro e o último dia do ano não contaria todos os julgamentos do ano, apenas os dessas duas datas específicas. A alternativa B usa a função MONTH(), que retorna o mês (1 a 12), e compara com 2022, o que nunca seria verdadeiro. A alternativa D compara a coluna DATE diretamente com a string '2022', o que não corresponde a nenhuma data válida, pois uma data completa precisa de dia, mês e ano.

A pegadinha aqui é dupla: primeiro, a banca testa se você sabe que MONTH() retorna o mês, não o ano; segundo, testa se você sabe que comparar uma data com uma string incompleta não funciona. A alternativa C é a única que usa corretamente o padrão de string para filtrar por ano.

  1. 1Coluna DATE = 'YYYY-MM-DD'
  2. 2LIKE '2022-%' casa o ano
  3. 3COUNT(ID) total do ano
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

A sintaxe da data '2022-31-12' está errada. O formato padrão de data em SQL é 'YYYY-MM-DD', então o dia 31 de dezembro de 2022 deveria ser '2022-12-31'. Além disso, mesmo corrigindo a sintaxe, a consulta retornaria apenas os julgamentos ocorridos exatamente em 1º de janeiro e 31 de dezembro de 2022, não todos os julgamentos do ano. O operador IN verifica se o valor está em uma lista de valores exatos, não em um intervalo.

Alternativa B — ❌ Incorreta

A função MONTH() extrai o mês de uma data, retornando um valor entre 1 e 12. Comparar MONTH(Data_Julgamento) = 2022 nunca será verdadeiro, pois o mês nunca é 2022. A função correta para extrair o ano é YEAR(). Essa alternativa confunde as funções de extração de partes de data.

Alternativa C — ✅ Correta ⟵ GABARITO

O operador LIKE é usado para correspondência de padrões em strings. Quando aplicado a uma coluna DATE, o MySQL converte a data para o formato de string 'YYYY-MM-DD'. O padrão '2022-%' corresponde a qualquer string que comece com '2022-', ou seja, qualquer data do ano de 2022. A função COUNT(ID) conta o número de registros que atendem a essa condição. Esta é uma solução correta e eficiente para o problema.

Alternativa D — ❌ Incorreta

Comparar uma coluna DATE com a string '2022' não é válido. O MySQL tentará converter a string '2022' para uma data, o que resultará em erro ou em uma data inválida (como '2022-00-00'), que não corresponderá a nenhum registro. Para filtrar por ano, é necessário usar uma função como YEAR() ou um padrão LIKE.

Alternativa E — ❌ Incorreta

A função YEAR() extrai o ano de uma data, o que é um bom começo. No entanto, o operador BETWEEN '2022' AND '2023' inclui os anos de 2022 e 2023, retornando também os julgamentos de 2023, o que não atende ao requisito de "ano de 2022". O correto seria YEAR(Data_Julgamento) = 2022. Além disso, comparar o resultado de YEAR() (um número inteiro) com strings pode causar conversões implícitas, mas o erro principal é o intervalo incorreto.

Gabarito: letra C

Link permanente: /questoes/vu195611