Pular para o conteúdo principal

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

Banco de DadosConsultas e Comandos em SQL
Código
fg169070
Banca
FGV
Órgão
MPU
Ano
2025
Cargo
Ana
Observe os registros incluídos na tabela Processo pelo seguinte script SQL:   INSERT INTO Processo (processoID, descricao)    VALUES (1, 'Tributário'); INSERT INTO Processo (processoID, descricao)    VALUES (2, 'Divórcio'); INSERT INTO Processo (processoID, descricao)    VALUES (3, 'Trabalhista'); SELECT * FROM PROCESSO;   Para consultar apenas os Processos (Processo) que possuem o termo “trabalhista” no campo descrição (descricao), deve-se complementar a consulta com a cláusula WHERE e a seguinte condição:
  1. Adescricao = 'trabalhista';
  2. Bdescricao ilike 'trabalhista';
  3. C'_trabalhista_' != descricao;
  4. D'%trabalhista%' IN descricao;
  5. EPOSITION('trabalhista' IN descricao);
Revelar gabarito e comentário

GabaritoB — descricao ilike 'trabalhista';

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: operador ILIKE e correspondência de padrões

Gabarito: letra B. Para consultar apenas os processos que possuem o termo "trabalhista" no campo descricao, a condição correta é descricao ilike 'trabalhista'. O operador ILIKE realiza uma comparação de padrão insensível a maiúsculas e minúsculas (case-insensitive), o que é essencial porque o valor armazenado é 'Trabalhista' (com 'T' maiúsculo) e o termo buscado é 'trabalhista' (com 't' minúsculo). As demais alternativas ou usam operadores inadequados para busca de padrão ou possuem sintaxe incorreta.

A questão testa o conhecimento sobre os operadores de comparação e correspondência de padrões na linguagem SQL. O comando SELECT é usado para consultar dados, e a cláusula WHERE filtra os registros que atendem a uma condição específica. Para buscar um termo dentro de um campo de texto, existem diferentes abordagens, e a escolha correta depende do comportamento desejado em relação a maiúsculas/minúsculas e à posição do termo.

O operador LIKE é o mais comum para correspondência de padrões em SQL. Ele utiliza os curingas % (qualquer sequência de caracteres) e _ (um único caractere). Por exemplo, WHERE descricao LIKE '%trabalhista%' encontraria qualquer descrição que contenha a palavra "trabalhista" em qualquer posição. No entanto, o LIKE é sensível a maiúsculas e minúsculas em muitos SGBDs (como PostgreSQL, por padrão). Isso significa que LIKE 'trabalhista' não encontraria 'Trabalhista'.

Para contornar essa limitação, o PostgreSQL oferece o operador ILIKE, que é a versão insensível a maiúsculas e minúsculas do LIKE. Com ILIKE, a comparação descricao ILIKE 'trabalhista' encontraria tanto 'Trabalhista' quanto 'trabalhista', 'TRABALHISTA', etc. Como o valor armazenado é 'Trabalhista' e o termo buscado é 'trabalhista', o ILIKE é a escolha correta para garantir que a consulta retorne o registro esperado, independentemente da capitalização.

Outra alternativa seria usar LOWER(descricao) = 'trabalhista', que converte o campo para minúsculas antes de comparar. No entanto, essa não é uma das opções apresentadas. A questão, portanto, foca no conhecimento específico do operador ILIKE e na diferença entre ele e o LIKE.

A pegadinha da questão está na capitalização: o valor armazenado é 'Trabalhista' (com 'T' maiúsculo), enquanto o termo buscado é 'trabalhista' (com 't' minúsculo). Se o candidato escolhesse a alternativa A (descricao = 'trabalhista'), a consulta não retornaria nenhum registro, pois a comparação exata é sensível a maiúsculas e minúsculas. A alternativa B resolve esse problema usando ILIKE, que ignora a diferença entre maiúsculas e minúsculas.

Alternativa A — ❌ Incorreta

A condição descricao = 'trabalhista' usa o operador de igualdade, que é sensível a maiúsculas e minúsculas na maioria dos SGBDs. Como o valor armazenado é 'Trabalhista' (com 'T' maiúsculo), a comparação com 'trabalhista' (com 't' minúsculo) falharia e nenhum registro seria retornado. Para uma busca exata, seria necessário usar descricao = 'Trabalhista', mas isso não atenderia ao requisito de buscar o termo "trabalhista" de forma genérica.

Alternativa B — ✅ Correta ⟵ GABARITO

A condição descricao ilike 'trabalhista' usa o operador ILIKE, que é a versão insensível a maiúsculas e minúsculas do LIKE. Isso significa que a comparação encontraria 'Trabalhista', 'trabalhista', 'TRABALHISTA', etc. Como o valor armazenado é 'Trabalhista' e o termo buscado é 'trabalhista', o ILIKE garante que o registro seja retornado, independentemente da capitalização. É a alternativa que atende corretamente ao requisito da questão.

Alternativa C — ❌ Incorreta

A condição '_trabalhista_' != descricao usa o operador de diferença (!=) e os curingas _ (que representam um único caractere). Essa condição retornaria todos os registros cuja descrição não seja exatamente uma string com um caractere antes e um depois de "trabalhista" (como 'X trabalhista Y'). Isso não atende ao requisito de buscar apenas os processos que possuem o termo "trabalhista". Além disso, a sintaxe é confusa e não usa o operador de correspondência de padrão adequado (LIKE ou ILIKE).

Alternativa D — ❌ Incorreta

A condição '%trabalhista%' IN descricao está com a sintaxe invertida. O operador IN é usado para verificar se um valor está em uma lista de valores, como descricao IN ('a', 'b', 'c'). A sintaxe correta para usar curingas seria descricao LIKE '%trabalhista%'. A forma apresentada na alternativa é inválida e geraria um erro de sintaxe no SGBD.

Alternativa E — ❌ Incorreta

A função POSITION('trabalhista' IN descricao) retorna a posição da primeira ocorrência do termo "trabalhista" na string descricao. Se o termo não for encontrado, retorna 0. No entanto, essa função não é uma condição booleana que possa ser usada diretamente na cláusula WHERE. Para usá-la como condição, seria necessário comparar o resultado com algo, como POSITION('trabalhista' IN descricao) > 0. A forma apresentada na alternativa não é uma condição válida e não filtraria os registros corretamente.

Gabarito: letra B

Link permanente: /questoes/fg169070