Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — FGV 2024

Banco de DadosConsultas e Comandos em SQL
Código
fg165282
Banca
FGV
Órgão
Pref Nova Iguaçu
Ano
2024
Cargo
Cont ( )

Um banco de dados relacional foi construído utilizando o código SQL a seguir:

 

Imagem associada para resolução da questão

 

OBS: Neste banco de dados, cadeias de caracteres (strings) são representadas envoltas em aspas simples.

 

Considere que todos os dados cadastrados alfabéticos nas tabelas foram armazenados utilizando caracteres maiúsculos.

 

Analise a consulta SQL padrão ANSI a seguir:

 

select descricao from tb_contas

where /* COMPLETAR */

 

Qual das opções completa corretamente o restante da cláusula WHERE acima destacado no comentário /* COMPLETAR */, a fim de que ela apresente as descrições de contas que contenham a palavra DESPESA em qualquer posição?

  1. Adescricao = '%DESPESA%'
  2. Bdescricao in '*DESPESA*'
  3. Cdescricao is '*DESPESA*'
  4. Ddescricao like '%DESPESA%'
  5. Edescricao like 'DESPESA'
Revelar gabarito e comentário

GabaritoD — descricao like '%DESPESA%'

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

Operador LIKE e curingas em SQL

Gabarito: letra D. Para buscar descrições que contenham a palavra DESPESA em qualquer posição, o correto é usar o operador LIKE com o curinga % antes e depois do termo: descricao like '%DESPESA%'. O LIKE é o operador padrão do SQL para correspondência de padrões em strings, e % representa qualquer sequência de caracteres (inclusive vazia). As demais alternativas usam operadores incorretos (=, IN, IS) ou curingas errados (*).

O operador LIKE é utilizado na cláusula WHERE para filtrar linhas com base em um padrão de texto. Ele é essencial quando não se busca uma igualdade exata, mas sim uma correspondência parcial. Os dois curingas principais são:

  • % (porcentagem): corresponde a zero ou mais caracteres.

  • _ (sublinhado): corresponde a exatamente um caractere.

No caso da questão, queremos descrições que contenham a palavra DESPESA em qualquer posição. Isso significa que pode haver qualquer quantidade de caracteres antes e depois da palavra. Portanto, o padrão deve ser '%DESPESA%'.

Vamos entender por que as outras alternativas estão erradas:

  • A) descricao = '%DESPESA%': o operador = compara igualdade exata, não aceita curingas. O % seria tratado como caractere literal, não como curinga.

  • B) descricao in '*DESPESA*': o operador IN é usado para comparar com uma lista de valores, não para padrões. Além disso, * não é curinga do SQL (é usado em expressões regulares, mas não no LIKE).

  • C) descricao is '*DESPESA*': o operador IS é usado para comparar com NULL (ex.: IS NULL), não para strings. E * também não é curinga válido.

  • E) descricao like 'DESPESA': sem curingas, o LIKE exige correspondência exata, ou seja, a descrição deve ser exatamente 'DESPESA', sem caracteres adicionais.

A pegadinha aqui é a troca do operador LIKE por = ou por operadores que não servem para padrões (IN, IS), além do uso de * em vez de %. Muitos candidatos confundem LIKE com = ou usam * por influência de outras linguagens (como expressões regulares).

1Curingas
% (zero ou mais caracteres)
_ (exatamente um caractere)
2Padrões
Começa com: 'termo%'
Termina com: '%termo'
Contém: '%termo%'
3Operadores que NÃO aceitam curingas
= (igualdade exata)
IN (lista de valores)
IS (comparação com NULL)
Operador LIKE (SQL)
LEVELsoulevel.com.br
Operador LIKE (SQL): Curingas (% (zero ou mais caracteres), _ (exatamente um caractere)); Padrões (Começa com: 'termo%', Termina com: '%termo', Contém: '%termo%'); Operadores que NÃO aceitam curingas (= (igualdade exata), IN (lista de valores), IS (comparação com NULL))

Alternativa A — ❌ Incorreta

O operador = compara igualdade exata. O padrão '%DESPESA%' seria interpretado literalmente, ou seja, buscaria descrições que fossem exatamente a string %DESPESA%, o que não atende ao requisito. Para usar curingas, é obrigatório o LIKE.

Alternativa B — ❌ Incorreta

O operador IN é usado para verificar se um valor está em uma lista de valores (ex.: WHERE coluna IN (1,2,3)). Não aceita curingas. Além disso, * não é curinga do SQL; o curinga correto é %.

Alternativa C — ❌ Incorreta

O operador IS é usado exclusivamente para comparação com NULL (ex.: WHERE coluna IS NULL). Não serve para comparar strings com padrões. E * novamente não é curinga válido.

Alternativa D — ✅ Correta ⟵ GABARITO

O operador LIKE é o correto para correspondência de padrões. O padrão '%DESPESA%' significa: qualquer sequência de caracteres (inclusive vazia) antes e depois de 'DESPESA'. Isso atende exatamente ao requisito de conter a palavra em qualquer posição.

Alternativa E — ❌ Incorreta

Embora use o operador LIKE, o padrão 'DESPESA' sem curingas exige que a descrição seja exatamente 'DESPESA', sem caracteres adicionais. Não atende ao requisito de conter a palavra em qualquer posição.

PEGA ESSA DICA!

Na prova, lembre-se: LIKE é o único operador que aceita curingas % e _. % = qualquer sequência (inclusive vazia); _ = um caractere. Se a questão pedir "começa com", use 'termo%'; "termina com", use '%termo'; "contém", use '%termo%'. E nunca use * — isso é de expressão regular, não de SQL.

Gabarito: letra D

Link permanente: /questoes/fg165282