Pular para o conteúdo principal

Questão de Banco de Dados — PostgreSQL — FUNDATEC 2023

Banco de DadosPostgreSQL
Código
qq896931
Banca
FUNDATEC
Órgão
PROCERGS
Ano
2023
Nível
Superior
Cargo
ANC - Analista em Computação - Ênfase em Suporte de Banco de Dados
Considerando o sistema de banco de dados relacional PostgreSQL versão 14, em um banco de dados, existe uma tabela Funcionario. A tabela Funcionario tem quatro colunas:• id, uma chave serial • nome, do tipo string • endereco, do tipo string • contato, do tipo JSONB O objeto JSON contato tem um campo chamado email. Qual das seguintes queries retornariam todos os funcionários cujo endereço de email termine em @exemplo.com?
  1. ASELECT * FROM Funcionario WHERE contato->>'email' LIKE '%@exemplo.com';
  2. BSELECT * FROM Funcionario WHERE contato->'email' LIKE '%@exemplo.com';
  3. CSELECT * FROM Funcionario WHERE contato->>'email' = '*@exemplo.com';
  4. DSELECT * FROM Funcionario WHERE contato->'email' = '%@exemplo.com';
  5. ESELECT * FROM Funcionario WHERE contato->'email' = '*@exemplo.com';
Revelar gabarito e comentário

GabaritoA — SELECT * FROM Funcionario WHERE contato->>'email' LIKE '%@exemplo.com';

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

PostgreSQL: Consulta em coluna JSONB

Gabarito: letra A. A query correta usa o operador ->> para extrair o campo email como texto e a cláusula LIKE com o padrão '%@exemplo.com' para filtrar endereços que terminam com @exemplo.com.

A tabela Funcionario possui uma coluna contato do tipo JSONB, que armazena um objeto JSON com um campo email. No PostgreSQL, o operador ->> acessa um campo JSON e retorna o valor como texto (TEXT), enquanto o operador -> retorna o valor como JSON (ou NULL). Para usar operadores de string como LIKE, é necessário que o valor seja do tipo texto, portanto ->> é o operador adequado.

O padrão '%@exemplo.com' utiliza o curinga % do LIKE, que corresponde a qualquer sequência de caracteres, garantindo que emails terminados em @exemplo.com sejam selecionados.

Operador

Retorno

Uso com LIKE

Exemplo correto

->>

Texto (TEXT)

✅ Sim

contato->>'email' LIKE '%@exemplo.com'

->

JSON

❌ Não

contato->'email' LIKE ... (erro de tipo)

=

Comparação exata

❌ Não (sem curinga)

contato->>'email' = '%@exemplo.com' (não funciona)

%

Curinga do LIKE

✅ Sim

'%@exemplo.com'

*

Não é curinga no PostgreSQL

❌ Não

'*@exemplo.com' (literal)

Alternativa A — ✅ Correta ⟵ GABARITO

SELECT * FROM Funcionario WHERE contato->>'email' LIKE '%@exemplo.com';

Correta: ->> extrai o email como texto, e LIKE com % realiza a correspondência de padrão corretamente.

Alternativa B — ❌ Incorreta

SELECT * FROM Funcionario WHERE contato->'email' LIKE '%@exemplo.com';

Erro: usa -> em vez de ->>. O operador -> retorna o valor como JSON (objeto ou string JSON), não como texto, e o LIKE não se aplica a tipos JSON. A consulta pode gerar erro de tipo ou retornar vazio.

Alternativa C — ❌ Incorreta

SELECT * FROM Funcionario WHERE contato->>'email' = '*@exemplo.com';

Erro: usa = em vez de LIKE e o curinga * em vez de %. O operador = exige correspondência exata; * não é curinga no PostgreSQL (o curinga é %). Assim, somente funcionários com email literal *@exemplo.com seriam retornados.

Alternativa D — ❌ Incorreta

SELECT * FROM Funcionario WHERE contato->'email' = '%@exemplo.com';

Erro: combina dois erros: (1) -> em vez de ->> e (2) = em vez de LIKE. A consulta tentaria comparar um valor JSON com a string '%@exemplo.com', o que não corresponde à intenção.

Alternativa E — ❌ Incorreta

SELECT * FROM Funcionario WHERE contato->'email' = '*@exemplo.com';

Erro: mesmo erro de operador (->) e uso de = com curinga incorreto (*). Não produz o resultado esperado.

NÃO CAIA NESSA!

A banca troca o operador ->> (que retorna texto) por -> (que retorna JSON) nas alternativas B, D e E. Além disso, confunde LIKE com = e o curinga % com *. Lembre-se: para acessar campos JSONB como texto, use ->>; para fazer busca por padrão, use LIKE e %.

Gabarito: letra A.

Link permanente: /questoes/qq896931