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 APorcentagem 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 charactersQuando % 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 labelProtegendo 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_bA 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:
LIKEdiferencia maiúsculas e minúsculas; useILIKEpara 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 TOe 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 deESCAPEe 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.
Aprenda SQL com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 30
- Aulas
- 120
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
- Precedência de AND/OR e uso de parênteses
- BETWEEN, IN e limites inclusivos
- LIKE, curingas e escape
- Filtrando por valores calculados