Categories
Banco de dados Tutoriais

Como encontrar padrões entre os seus dados no MySQL

Como fazer uma pesquisa por padrões dentro de um banco de dados MySQL, com o uso de curingas, do comando LIKE e algumas funções de manipulação de strings.

Esta solução se aplica à busca de padrões em meio ao banco de dados MySQL, com o uso do operador LIKE.
Padrões são strings contendo caracteres especiais.
MySQL_Positive_Energy_001
São conhecidos como meta caracteres porque representam algo diferente de si mesmos.

“Casamento de padrões é o ato de verificação da presença de um padrão em um conjunto de dados (…) usado para testar se o objeto de estudo possui a estrutura desejada (…)” Wikipedia.

O MySQL tem 2 tipos de casamento de padrões. Um, baseado em padrões SQL e outro baseado em expressões regulares.
Cada um destes usa seus próprios operadores e diferentes sets de meta caracteres.
Neste texto, vou me limitar aos padrões SQL.

Exemplos de uso do operador LIKE no MySQL

O casamento de padrões SQL usa os operadores LIKE e NOT LIKE – em vez de = ou != – para encontrar paridade entre padrões.
Os padrões podem conter dois meta caracteres especiais (ou coringas):

  • % — o sinal de percentual serve para buscar a correspondência exata de caracteres — sem se preocupar com o posicionamento deles dentro da string.
  • _ — o sinal de sublinha ou underscore procura a correspondência, só que dentro do mesmo posicionamento de caracteres.
  • São caracteres-curinga, portanto. Semelhantes aos que você usa em um terminal para se referir a vários nomes de arquivos que sejam parcialmente iguais. Ex.: mysql.*, config*.ini etc.

    A palavra curinga se origina do termo “kuringa”, em kimbundo. E significa “matar”.
    via Wikipedia.

Complicado? Então, vamos deixar os exemplos falarem por si.
Veja como fazer uma busca, dentro da tabela ClientesCidades, por todos os nomes de cidades que contenham a sequência de caracteres “co”, no início:

SELECT CidadeCliente FROM ClientesCidades WHERE CidadeCliente LIKE 'co%';
+-----------------+
| CidadeCliente   |
+-----------------+
| Corroy-le-Grand |
| Coalhurst       |
| Colonnella      |
+-----------------+
3 rows in set (0.04 sec)

Você não precisa usar as minhas tabelas para aplicar os exemplos no seu aprendizado. Pode usar qualquer outra, que você tiver disponível. Basta readequar os exemplos deste texto à sua realidade.
Só não vá brincar com os dados da produção.


Se quiser encontrar os nomes de cidade que terminem com a sequência “co”, inverta a posição do sinal de percentual (%):

SELECT CidadeCliente FROM ClientesCidades WHERE CidadeCliente LIKE '%co';
+---------------+
| CidadeCliente |
+---------------+
| Girifalco     |
| Recco         |
+---------------+

Ou, encontre todos nomes de cidade que contenham a sequência “co”, em qualquer posição na string:

SELECT CidadeCliente FROM ClientesCidades WHERE CidadeCliente LIKE '%co%';
+------------------------+
| CidadeCliente          |
+------------------------+
| Girifalco              |
| San Costantino Calabro |
| Rocourt                |
| Beaconsfield           |
| Rachecourt             |
| Vancouver              |
| Lacombe                |
| Port Lincoln           |
| Corroy-le-Grand        |
| Recco                  |
| Coalhurst              |
| San Demetrio Corone    |
| Lakeland County        |
| Beaconsfield           |
| Colonnella             |
+------------------------+
15 rows in set (0.01 sec)

Note que, neste caso, o operador sequer exige que haja a correspondência da caixa das letras — ou seja, “Colonnella” e “u>colonnella” são a mesma coisa.
Ao criar um sistema de buscas, usar coringas é uma opção para encontrar e exibir uma série de resultados relacionados.
O caractere-curinga underscore (_) é mais restritivo. Ele só serve para substituir os caracteres que se encontram na posição em que ele for colocado na busca.

Uso de curinga Correspondências possívels
__enda Brenda, Glenda
___nda Brenda, Glenda, Amanda, Chanda.
C_ntia Cíntia, Cintia, Cyntia
C_n%ia Cíntia, Cintia, Cyntia, Cynthia, Cínthia etc.

Espero que a tabela ajuda a entender melhor o funcionamento do underscore no SQL.
Veja alguns exemplos de uso do LIKE, combinado a este caractere-curinga:

SELECT Nome FROM Clientela WHERE Nome LIKE 'Al__a';
+----------+
| Nome     |
+----------+
| Alisa    |
| Alana    |
| Alexa    |
| Alana    |
+----------+
4 rows in set (0.00 sec)

Combine o uso dos caracteres-curinga ‘%’ e ‘_’ para enriquecer seus resultados — o que pode ser necessário, se a coluna incluir nome e sobrenome:

SELECT NomeCliente FROM ClientesCidades WHERE NomeCliente LIKE 'I__ana%' ORDER BY NomeCliente;
+------------------+
| NomeCliente      |
+------------------+
| Iliana Cleveland |
| Illana Cannon    |
+------------------+
2 rows in set (0.00 sec)

Como usar o NOT LIKE em uma query MySQL

Se eu quiser uma relação de todos os nomes que não contenham uma determinada letra ou sequência de caracteres, posso usar o NOT LIKE para fazer o trabalho. Veja um exemplo, que exclui todos os nomes (e sobrenomes) que contenham a letra ‘a’:

SELECT NomeCliente FROM ClientesCidades WHERE NomeCliente NOT LIKE '%a%' ORDER BY NomeCliente;
+--------------------+
| NomeCliente        |
+--------------------+
| Bo Simpson         |
| Emily Holmes       |
| Emily Tyson        |
| Giselle Rice       |
| Helen Burke        |
| Melodie Levy       |
| Mercedes Hendricks |
| Michelle Whitley   |
| Simone Everett     |
| Yvonne Wilcox      |
+--------------------+
10 rows in set (0.00 sec)

Como combinar as buscas com LIKE e outras funções de manipulação de strings no MySQL

Use funções específicas para retirar o que te interessa nas strings:

SELECT NomeCliente FROM ClientesCidades WHERE LEFT(Nomecliente,3) LIKE 'wil%' ORDER BY NomeCliente;
+-----------------+
| NomeCliente     |
+-----------------+
| Willa Kerr      |
| Willow Graham   |
| Willow Mitchell |
| Willow Simmons  |
| Wilma Hill      |
+-----------------+
5 rows in set (0.00 sec)

Leia mais sobre funções para decompor strings ou use o quadro de busca desta página para se aprofundar mais no assunto.

Referências: Casamentos de padrão na Wikipedia: http://pt.wikipedia.org/wiki/Casamento_de_padr%C3%B5es.
Como pesquisar sequências de caracteres dentro de strings, com a função LOCATE, no MySQL.

By Elias Praciano

Autor de tecnologia (livre, de preferência), apaixonado por programação e astronomia.
Fã de séries, como "Rick and Morty" e "BoJack Horseman".
Me siga no Twitter e vamos trocar ideias!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.