0Pricing
SQL Interview Prep · Aula

LIKE, curingas e escape

Aprenda sobre correspondência de padrões, porcentagem versus sublinhado e escape de caracteres curinga literais.

LIKE, curingas e escape é uma aula grátis de SQL Interview Prep no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Interview Prep, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Interview Prep inclui 4 aulas no total.

Correspondência de padrões sob análise em entrevistas

LIKE parece simples, mas esconde três armadilhas clássicas de entrevistas: confundir % com _, esquecer que um sinal de porcentagem ou sublinhado literal nos dados precisa ser escapado e surpreender-se com a diferenciação entre maiúsculas e minúsculas, que varia conforme o banco de dados.

Esta lição aprofunda os dois curingas, a cláusula ESCAPE e as regras entre dialetos que um entrevistador explorará para distinguir iniciantes de pessoas que já colocaram recursos reais de busca em produção.

Os dois curingas

LIKE tem exatamente dois caracteres curinga:

  • % corresponde a zero ou mais caracteres
  • _ corresponde a exatamente um caractere

Assim, 'a%' corresponde a qualquer coisa que comece com a, enquanto 'a_' corresponde a uma sequência de dois caracteres que começa com a. Confundi-los é o erro mais comum com LIKE.

SELECT *
FROM customers
WHERE name LIKE 'A%';
-- every name beginning with A

Porcentagem em qualquer posição

Posicione o % para controlar onde a correspondência começa ou termina:

  • '%son' termina com son (Johnson, Mason)
  • '%mary%' contém mary em qualquer posição
  • 'J%n' começa com J e termina com n

Um '%' isolado corresponde a todas as linhas que não têm NULL. Valores NULL nunca correspondem a nenhum padrão de LIKE, inclusive '%'.

SELECT *
FROM customers
WHERE email LIKE '%@gmail.com';

Sublinhado para comprimento fixo

_ corresponde a um único caractere arbitrário, sendo útil para códigos de largura fixa. 'A__' corresponde exatamente a três caracteres que começam com A, nem mais nem menos.

Entrevistadores testam isso com códigos de produtos ou de países. A pessoa candidata que escreve 'A%' quando solicitada a encontrar um código de três caracteres que comece com A está sutilmente errada, pois retorna qualquer sequência iniciada por A.

SELECT *
FROM products
WHERE sku LIKE 'A__';
-- A followed by exactly two more characters

Quando % e _ aparecem nos dados

E se você precisar encontrar valores que contenham literalmente um sinal de porcentagem, como um rótulo de desconto 50% de desconto? Escrever LIKE '%50%%' falha, porque o % final é tratado como curinga, e não como um caractere literal.

Você precisa informar ao SQL que um caractere específico deve ser literal. É para isso que serve a cláusula ESCAPE.

A cláusula ESCAPE

Declare um caractere de escape com ESCAPE e, em seguida, prefixe qualquer curinga que queira tratar literalmente. Aqui, ! é o caractere de escape, portanto !% significa um sinal de porcentagem literal.

Isso encontra valores que contenham o texto literal 50% em qualquer posição. O caractere de escape pode ser qualquer um; escolha um que não apareça no texto da busca.

SELECT *
FROM promos
WHERE label LIKE '%50!%%' ESCAPE '!';
-- matches a literal '50%' anywhere in label

Protegendo um sublinhado literal

Sublinhados aparecem em nomes de usuário e identificadores, e um _ sem escape corresponde silenciosamente a qualquer caractere. Para encontrar endereços de e-mail que literalmente comecem com 'a_b', você precisa escapar o sublinhado.

Sem o escape, 'a_b%' também corresponderia a 'axb', 'a9b' e assim por diante. Esse erro chega constantemente à produção porque a consulta sem escape ainda retorna linhas plausíveis.

SELECT *
FROM users
WHERE handle LIKE 'a!_b%' ESCAPE '!';
-- handle starting with the literal text a_b

A diferenciação entre maiúsculas e minúsculas varia conforme o banco de dados

O fato de LIKE diferenciar maiúsculas e minúsculas depende do mecanismo e da ordenação:

  • PostgreSQL: LIKE diferencia maiúsculas e minúsculas; use ILIKE para ignorar essa diferença
  • MySQL: depende da ordenação da coluna e, muitas vezes, não diferencia maiúsculas e minúsculas por padrão
  • SQL Server: depende da configuração de ordenação

A abordagem portátil e explícita é converter os dois lados para minúsculas.

SELECT *
FROM customers
WHERE LOWER(name) LIKE 'a%';

O custo oculto de desempenho

Um curinga inicial, como '%son', não pode usar um índice comum de árvore B, porque o índice é ordenado pelo prefixo e o início não está fixado. O mecanismo precisa varrer todas as linhas.

'son%', com curinga final e prefixo fixado, pode usar um índice. Entrevistadores adoram perguntar por que uma busca com LIKE é lenta; o % inicial geralmente é a resposta.

-- index-friendly (anchored prefix):
WHERE name LIKE 'Smi%'
-- forces a scan (leading wildcard):
WHERE name LIKE '%mith'

Além de LIKE

Quando LIKE não for suficiente, mencione as alternativas para demonstrar conhecimento:

  • SIMILAR TO e expressões regulares POSIX (~, ~*) no PostgreSQL para expressões regulares verdadeiras
  • Índices de busca de texto completo para grandes conjuntos de textos livres
  • Índices de trigramas (pg_trgm) para tornar rápidas as buscas com curinga inicial

Mencionar essas opções demonstra que você sabe que LIKE é a base, não o limite máximo, da busca textual.

Criando padrões com LIKE a partir da entrada do usuário com segurança

Os entrevistadores costumam perguntar: como você pesquisa um termo digitado pelo usuário com LIKE sem causar problemas? Há dois riscos que você deve mencionar:

  • Injeção — vincule o valor como um parâmetro; nunca concatene a entrada bruta à cadeia de texto SQL.
  • Caracteres curinga sem escape — se a própria entrada contiver % ou _, aplique escape a eles para que correspondam literalmente.

Vincule o parâmetro e depois adicione seus próprios caracteres curinga na consulta.

-- $1 is bound as a parameter; wildcards are added in SQL
SELECT *
FROM products
WHERE name LIKE '%' || replace(replace($1, '_', '\_'), '%', '\%') || '%' ESCAPE '\';

Verificação rápida

Lembre-se da diferença entre os dois curingas.

Resumo

Principais conclusões:

  • % corresponde a zero ou mais caracteres; _ corresponde a exatamente um
  • Para corresponder a um % ou _ literal nos dados, declare um caractere de ESCAPE e prefixe o curinga
  • A diferenciação entre maiúsculas e minúsculas varia conforme o mecanismo; aplicar LOWER() aos dois lados é a correção portátil (no Postgres há ILIKE)
  • Um curinga inicial força uma varredura completa; um prefixo fixado pode usar um índice

Um _ sem escape é um erro silencioso: ele ainda retorna linhas plausíveis.

Perguntas Frequentes

A aula “LIKE, curingas e escape” é grátis?

Sim — o texto completo de “LIKE, curingas e escape” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Interview Prep, atualize para CoddyKit PRO. O curso de SQL Interview Prep inclui 4 aulas no total.

O que vou aprender em “LIKE, curingas e escape”?

Aprenda sobre correspondência de padrões, porcentagem versus sublinhado e escape de caracteres curinga literais. Você pratica SQL Interview Prep com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar SQL Interview Prep?

Nenhuma experiência prévia é necessária. SQL Interview Prep no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “LIKE, curingas e escape”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de SQL Interview Prep?

Sim. Cada aula de SQL Interview Prep inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Precedência de AND/OR e uso de parênteses
  2. BETWEEN, IN e limites inclusivos
  3. LIKE, curingas e escape
  4. Filtrando por valores calculados
← Voltar para SQL Interview Prep