Questão de Banco de Dados — Consultas e Comandos em SQL — FGV 2024
Banco de Dados›Consultas 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:
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?
Adescricao = '%DESPESA%'
Bdescricao in '*DESPESA*'
Cdescricao is '*DESPESA*'
Ddescricao like '%DESPESA%'
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).
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.