SQL LIKE: pesquisando valores similares em uma coluna!

O comando SQL LIKE é um importante recurso da linguagem SQL para auxiliar na seleção de dados específicos em uma tabela. Sua utilização é bastante útil quando queremos encontrar uma correspondência exata de um determinado termo, como palavras iniciadas ou terminadas com uma letra específica.

Apesar de muito útil, é preciso atenção ao utilizar esse recurso, pois se o comando SQL for muito complexo, pode impactar na performance da aplicação. Entretanto, existem algumas boas práticas que ajudam a pessoa programadora a extrair o máximo desse recurso, sem causar impactos negativos na aplicação.

Para demonstrar como esse recurso da linguagem SQL funciona, preparamos este conteúdo com os seguintes tópicos:

Continue conosco e boa leitura!

O que é o SQL LIKE?

O comando SQL LIKE é utilizado em conjunto com a cláusula WHERE e serve para realizar uma busca mais refinada em um campo de uma tabela. Para isso, ele utiliza caracteres curingas associados ao termo que será pesquisado, o que ajuda a tornar a busca mais refinada e precisa. São eles:

  • sinal de porcentagem “%”: utilizado para indicar zero, um ou múltiplos caracteres antes o depois do termo pesquisado;
  • caractere de sublinhado “_” : usado para representar um único caractere antes ou após o termo procurado.
  • palavra-chave ESCAPE: utilizada para que seja possível incluir os caracteres curingas (% e _ ) ao realizar uma busca.

É importante dizer que o uso da cláusula WHERE é obrigatória ao utilizarmos o LIKE. Caso contrário, teremos um erro de sintaxe como retorno do comando SQL. Além disso, o comando SQL LIKE é padrão da linguagem SQL. Isso significa que sua sintaxe é a mesma em diferentes modelos de banco de dados relacional, como no MySQL, Sql Server, Oracle, MS Access e muitos outros.

Qual a sintaxe do SQL LIKE?

A sintaxe do SQL LIKE é:

SELECT coluna1, coluna2, ... colunaN
  FROM nome_tabela
WHERE nome_coluna LIKE modelo;

Em que:

  • SELECT: é o comando responsável para a seleção de algum dado em alguma tabela na nossa base de dados;
  • coluna1, coluna2, colunaN: correspondem ao nome da coluna selecionada pelo comando SELECT;
  • FROM: cláusula utilizada para determinar qual tabela devemos fazer a consulta dos dados, qual delas será utilizada para esse fim;  
  • nome_tabela: representa o nome de tabela em que a busca será realizada;
  • WHERE: em português, where significa onde. Ou seja, é uma condição muito utilizada em consultas nas quais desejamos atribuir condições específicas a elas, como, por exemplo, filtrar apenas vendas acima de mil reais, filtrar apenas alunos com média superior a 5, etc;
  • nome_coluna: indica o nome da coluna em que a comparação do comando LIKE será realizada;
  • modelo: representa o valor a ser pesquisado em cada conteúdo da coluna selecionada.

O comando LIKE retorna um valor booleano, ou seja, verdadeiro ou falso caso a expressão procurada seja ou não encontrada.

8 exemplos de uso do comando SQL LIKE

Nada melhor que visualizar os resultados obtidos ao utilizarmos o comando SQL LIKE. Para isso, vamos criar uma pequena base de dados no MySQL. Dessa forma, será possível executar os comandos e conferir o resultado.

Criando a base de dados para os exemplos

Confira o script para a criação do banco de dados e a inserção de alguns registros que servirão de apoio para os exemplos que faremos a seguir.

Exemplo de uso código SQL

Resultado da base de dados criada

Para selecionarmos a base de dados criada acima, no caso, a tabela alunos, digitamos o seguinte comando: 

SELECT * FROM alunos;

O resultado será o seguinte:

IdNomeSobrenomeCidade
1João PauloSilvaSão Paulo
2Maria PaulaBarbosaSão Paulo
3JoanaSantosSão Paulo
4JoaquimPereiraBelo Horizonte
5NeideSaraivaBelo Horizonte
6josé paulofonsecaRio de Janeiro
7João LuizSilvaRio de Janeiro
8Paulo HenriqueCardosoSão Paulo
9José Pedro NetoBelo Horizonte

1. Buscar registros que comecem com uma determinada letra

Vamos utilizar o comando SQL LIKE para recuperar todas as pessoas da tabela alunos cujo nome comece com a letra “J”. Nesse cenário, devemos utilizar o sinal de porcentagem após o caractere que vamos pesquisar para compor o termo da busca. Veja como fica o comando:

SELECT nome FROM alunos WHERE nome LIKE 'J%'

Resultado:
João Paulo 
Joana 
Joaquim 
josé paulo 
João Luiz
José Pedro

Perceba que, propositalmente, adicionamos o nome “josé paulo” com as letras iniciais em minúscula. O objetivo era verificar se o comando faria a distinção entre maiúsculas e minúsculas. No nosso exemplo, o comando LIKE é case-insensitive, ou seja, não faz a distinção entre os dois tipos de caracteres.

Entretanto, é importante observar qual é o Charset (símbolos) e o Collation (regras de comparação de caracteres) utilizados ao criar o banco de dados, pois existem outras alternativas que fariam com que o retorno do nosso comando excluísse o registro com a inicial de letra minúscula.

2. Recuperar registros terminados com determinado caractere

Agora, vamos realizar a busca na base de dados para selecionar os nomes de alunos que terminem com a letra “o”. Para isso, utilizamos o caractere de percentual logo no início da expressão. Isso significa que apenas a última letra do campo será considerada. Veja como fica o comando SQL:

SELECT nome FROM alunos WHERE nome LIKE '%o'

Resultado:
João Paulo 
josé paulo 
José Pedro

Perceba que o resultado da seleção corresponde ao último caractere do campo e não do primeiro nome da pessoa. Por isso, se você olhar na nossa massa de dados, verá que temos o nome de “João Luiz” que não está listado no retorno desse comando.

Isso aconteceu porque, nesse caso, a última letra desse nome corresponde ao “z” (de Luiz) e não ao “o”, que é o caractere utilizado na expressão do nosso comando. Portanto, é preciso atenção ao construir as expressões para garantir o retorno desejado.

3. Procurar por um termo em qualquer posição do campo

Também é possível realizar a busca por um determinado termo em qualquer posição do campo. Para isso, devemos utilizar o caractere de percentual, conforme o exemplo a seguir:

SELECT nome FROM alunos WHERE nome LIKE '%oa%'

Resultado:
João Paulo 
Joana 
Joaquim
João Luiz 

No comando acima, selecionamos todos os registros do campo nome que tenham os caracteres “oa” em qualquer posição. Perceba que o nome “João Paulo” e “João Luiz” estão listados no nosso retorno, apesar de a letra “a” ter o acento til. Isso acontece pela mesma razão que mencionamos acima, ou seja, faz parte das regras do tipo de collation utilizada pelo banco de dados.

Portanto, se o banco de dados estiver configurado com uma collation diferente, esses registros não seriam selecionados por esse comando SQL.

4. Pesquisar a segunda letra de um determinado campo

Imagine que precisamos recuperar todos os alunos que tenham a letra “o” no segundo caractere do nome. Para isso, utilizaremos os dois caracteres curingas para compor a expressão de busca. Veja o código SQL a seguir.

SELECT nome FROM alunos WHERE nome LIKE '_o%'

Resultado:
João Paulo 
Joana
Joaquim
josé Paulo
João Luiz
José Pedro

Perceba que, para escrevermos a expressão, utilizamos primeiro o caractere de sublinhado seguido da letra “o”. Nesse comando, dizemos para o banco de dados que a primeira letra pode ser qualquer uma, a segunda deve ser a letra “o”, seguida de qualquer quantidade de caracteres.

Se não colocássemos o caractere de percentual no final da expressão, ela não retornaria nenhum valor.

5. Pesquisar palavras com três caracteres entre outras letras

O caractere curinga sublinhado “_” pode ser utilizado mais que uma vez. Dessa forma, é possível determinar características mais específicas em relação à busca. Veja um código de exemplo:

SELECT nome FROM alunos where nome like '%p___o%'

Resultado:
João Paulo
josé Paulo
Paulo Henrique
José Pedro

No comando acima, utilizamos os dois caracteres curingas para compor a expressão. Perceba que usamos primeiro o percentual para indicar que pode haver caracteres antes da letra “p”. A seguir, usamos três vezes o caractere de sublinhado seguido da letra “o”. Isso significa que entre a letra “p” e a letra “o” deve ter obrigatoriamente três caracteres entre elas.

Por fim, utilizamos novamente o caractere de percentual para indicar que pode haver mais caracteres após a letra “o”.

6. Pesquisar por palavras que começam e terminam com determinado caractere

Podemos indicar qual a letra inicial e final ao realizarmos uma seleção. No exemplo abaixo, selecionamos todas as pessoas em que a cidade comece com “b” e termine com “e”. Veja como fica o comando:

SELECT nome, cidade FROM alunos WHERE cidade LIKE 'b%e'

Resultado:
Joaquim / Belo Horizonte 
Neide / Belo Horizonte
José Pedro / Belo Horizonte

7. Pesquisando por palavras que não contêm a letra “e”

Para pesquisarmos palavras que não têm alguma letra nelas, utilizaremos o comando NOT LIKE. Nesse caso, para selecionarmos os nomes dos alunos que não possuem a letra “e”, utilizamos o seguinte comando: 

SELECT * FROM alunos WHERE nome NOT LIKE '%e%';

O resultado exibido é o seguinte: 

SQL Like Exemplo 7 Resultado

Podemos também, da mesma forma, selecionarmos outras informações, como o sobrenome ou a cidade que não possui a letra “e” nela. Bastaria apenas trocar o campo da consulta que você deseja fazer por outro. 

8. Utilizando escape

Digamos que você queira pesquisar a letra “s” como um literal na condição LIKE, para pegar apenas os sobrenomes que comecem com “s”. Você pode fazer isso usando um caractere Escape.

Em nosso exemplo, usaremos o  “%” como caractere de escape na condição LIKE:

SELECT *
FROM alunos
WHERE sobrenome LIKE 'S%%' ESCAPE '%';

O resultado será o seguinte: 

Resultado exemplo 8 SQL Like

Boas práticas ao usar o comando SQL LIKE

Existem tipos de dados, como o char, que preenchem o restante do campo com espaços em branco. Já o tipo varchar não tem essa característica. Assim, ao realizarmos uma busca em que o critério de seleção é feito com tipos de dados diferentes, o resultado pode não corresponder ao esperado em função dos caracteres em branco inseridos automaticamente no campo do tipo char.

Portanto, é preciso ter cuidado ao utilizar esse recursopara evitar surpresas indesejadas ao executar as buscas.

Como mencionamos, o comando LIKE utiliza caracteres curingas para realizar a busca dos dados na tabela. Dependendo de como eles forem utilizados, podem necessitar da leitura completa dos dados do campo, pois é mais rápido buscar palavras que começam com determinada letra, que palavras que contenham um grupo de caracteres no meio, como demonstramos no exemplo número seis.

Dessa forma, se a tabela for muito grande, o resultado pode demorar um pouco mais, se comparado a seleções feitas com operadores que utilizam dados exatos. Portanto, o ideal é ter atenção para evitar expressões muito complexas, que possam prejudicar a performance da aplicação.

A utilização do comando SQL LIKE ajuda a realizar buscas mais detalhadas. Isso porque ele consegue fazer uma comparação em cada caractere contido no campo.

Ele é indicado quando não temos o termo exato do que queremos recuperar ou quando queremos selecionar um grupo de registros com alguns caracteres semelhantes. Para extrair o máximo desse recurso, é preciso ter atenção às boas práticas para garantir o resultado esperado.

Gostou do nosso conteúdo sobre o comando SQL LIKE? Então, confira o que é DBA e quais as atribuições dessa carreira!