Voltar para a lista de artigos Artigos
10 minutos de leitura

Como usar LIKE em SQL: Correspondência de Padrões SQL

A correspondência de padrões SQL é uma habilidade muito importante e útil. Neste artigo, analisamos como você pode realizá-lo usando LIKE em SQL.

Acorrespondência de padrões SQL é um conceito muito simples. Ele permite que você pesquise cadeias e substratos e encontre certos caracteres ou grupos de caracteres. Além do SQL, esta operação pode ser realizada em muitas outras linguagens de programação.

Neste artigo, vamos examinar como você pode usar LIKE em SQL para pesquisar substratos. Também faremos a distinção entre correspondência exata SQL e correspondência parcial SQL, explicando como você pode expandir sua busca usando wildcards. Finalmente, esclareceremos quando você deve usar algo que não seja LIKE para encontrar uma correspondência.

Se você gostaria de praticar LIKE e outros recursos SQL, confira nosso Trilha de Práticas em SQL pista. Ele oferece mais de 600 exercícios SQL interativos para ajudá-lo a rever seus conhecimentos de SQL e ganhar confiança em suas habilidades SQL.

Como usar LIKE em SQL?

Suponha que você tenha que recuperar alguns registros com base em se uma coluna contém um determinado grupo de caracteres. Como você sabe, em SQL a cláusula WHERE filtra SELECT resultados. Por si só, WHERE encontra correspondências exatas. Mas e se você precisar encontrar algo usando uma correspondência parcial?

Nesse caso, você pode usar LIKE em SQL. Este operador procura caracteres específicos em strings ou substrings e retorna quaisquer registros que correspondam a este padrão. (Daí a correspondência do padrão SQL.) Abaixo está a sintaxe do operador LIKE em uma declaração SELECT:

SELECT   [ column_list |  *  ]   
FROM  table_name
WHERE  column or expression  LIKE  pattern;

Note que o nome da coluna ou a expressão a ser pesquisada vem antes do LIKE em SQL. Após o operador é o padrão a ser correspondido. Este padrão pode ser texto puro ou texto misturado com um ou mais wildcards. Explicaremos a seguir o uso de wildcards.

Combinação Parcial SQL: Uso de LIKE com curingas

Se você não sabe exatamente o padrão que está procurando, você pode usar wildcards para ajudá-lo a encontrá-lo. Os wildcards são símbolos de texto que denotam quantos caracteres estarão em um determinado lugar dentro da corda. O padrão SQL ANSI usa dois curingas, porcentagem (%) e sublinhado (_), que são usados de maneiras diferentes. Ao usar os curingas, você realiza uma correspondência parcial SQL em vez de uma correspondência exata SQL, pois não inclui uma string exata em sua consulta.

wildcard description
% zero, one, or many characters, including spaces
_ a single character

Veja o completo animal tabela que será utilizada em nossas consultas SQL:

id name
1 frog
2 dog
3 bear
4 fox
5 jaguar
6 puma
7 panda
8 lion
9 leopard
10 sheep
11 camel
12 monkey
13 lemur
14 rabbit
15 hedgehog
16 elephant
17 elephant.. .
18 langur
19 hog
20 gerenuk
21
22 null

Nota: ... . denota dois espaços.

Correspondência Parcial SQL: o wildcard percentual

Como você pode ver na tabela acima, a porcentagem de wildcard pode ser usada quando você não tem certeza de quantos caracteres farão parte de sua partida. No exemplo abaixo, observe o que acontece quando você usa somente este curinga com LIKE em SQL:

SELECT 
  id, 
  name 
FROM animal
WHERE name LIKE '%' ;

Resultado:

id name
1 frog
2 dog
3 bear
4 fox
5 jaguar
6 puma
7 panda
8 lion
9 leopard
10 sheep
11 camel
12 monkey
13 lemur
14 rabbit
15 hedgehog
16 elephant
17 elephant.. .
18 langur
19 hog
20 gerenuk
21

Nota: ... . denota dois espaços.

Este uso da partida parcial SQL retorna todos os nomes do animal tabela, mesmo aqueles sem nenhum caractere na coluna do nome. Isto porque o wildcard percentual denota qualquer caractere ou nenhum caractere. Mesmo quando há um valor nulo na coluna do nome, uma cadeia vazia é devolvida.

Mas se você gostaria de retornar somente os nomes dos animais que começam com um "g", você deve escrever a consulta usando um "g" em frente ao wildcard da porcentagem:

SELECT 
  id, 
  name 
FROM animal
WHERE name LIKE 'g%' ;

O resultado desta operação de correspondência parcial SQL é o seguinte:

id name
20 gerenuk

Da mesma forma, se você gostaria de selecionar os nomes dos animais que terminam com um "g", você colocaria a porcentagem de wildcard em primeiro lugar, como mostrado nesta consulta de correspondência parcial SQL:

SELECT 
  id, 
  name 
FROM animal
WHERE name LIKE '%g';

Resultado:

id name
1 frog
2 dog
15 hedgehog
19 hog

A seguinte consulta retorna todos os animais cujo nome contém um "g”. Para isso, usar dois por cento de wildcards e um ".g", como mostrado abaixo.

SELECT 
  id, 
  name 
FROM animal
WHERE name LIKE '%g%';

Resultado:

id name
1 frog
2 dog
5 jaguar
15 hedgehog
18 langur
19 hog
20 gerenuk

Todos estes animais têm um nome que contém um "g" em algum lugar - no início, no meio ou no fim.

Agora, vamos passar para o wildcard do sublinhado.

SQL Parcial Match: o wildcard do Underscore

O wildcard do sublinhado representa um único caractere para cada sublinhado. Nesta partida parcial SQL, ele pode substituir qualquer caractere, mas cada sublinhado é limitado a um caractere. Veja o exemplo abaixo:

SELECT 
  id, 
  name 
FROM animal
WHERE name LIKE '_';

Resultado:

id name

0 fileiras

Esta consulta não retornou nenhum registro porque não há nomes de animais com um único caractere na tabela.

O exemplo seguinte mostra todos os nomes que contêm exatamente cinco caracteres. Para representar isto, devemos usar cinco sublinhados:

SELECT 
  id, 
  name 
FROM animal
WHERE name LIKE '_____';

Resultado:

id name
7 panda
10 sheep
11 camel
13 lemur

Se você usar o wildcard de sublinhado no final de sua string de correspondência parcial SQL, a consulta retornará cada registro que corresponder ao texto dado mais um caractere a mais. Abaixo vemos um exemplo:

SELECT 
  id, 
  name 
FROM animal
WHERE name LIKE 'lio_';

Resultado:

id name
8 lion

O que é retornado quando a consulta tem um curinga de sublinhado no meio da cadeia de caracteres?

SELECT 
  id, 
  name 
FROM animal
WHERE name LIKE 'p_ma';

Resultado: O que é retornado quando a consulta tem um curinga de sublinhado no meio da cadeia de caracteres?

id name
6 puma

São todos os animais cujos nomes começam com "p" e terminar com "ma", com apenas um personagem no meio.

Parcialmente compatível com SQL: Combinação de Wildcards

Você também pode usar uma combinação de sublinhado e percentagem de wildcards para sua correspondência de padrões SQL. Veja o exemplo a seguir:

SELECT 
  id, 
  name 
FROM animal
WHERE name LIKE '%ho_';

Resultado:

id name
15 hedgehog
19 hog

Como você pode ver, esta consulta retornou nomes que combinavam "ho"com qualquer número de caracteres na frente e apenas um caractere a seguir.

Usando LIKE em SQL com Texto

Agora discutiremos como usar LIKE em SQL com strings apenas de texto e sem wildcards. Em algumas circunstâncias, você pode descobrir que há melhores opções do que usar LIKE em correspondência de padrões SQL. Mas, por enquanto, vamos ver como isto funciona. Vamos começar olhando a tabela completa de nomes de animais e números de identificação, como mostrado abaixo:

id name
1 frog
2 dog
3 bear
4 fox
5 jaguar
6 puma
7 panda
8 lion
9 leopard
10 sheep
11 camel
12 monkey
13 lemur
14 rabbit
15 hedgehog
16 elephant
17 elephant. ..
18 langur
19 hog
20 gerenuk
21
22 null

Nota: ... denota dois espaços.

Note que o registro onde id=21 tem uma cadeia vazia (sem caracteres). O último registro tem um valor NULL na coluna name.

Agora, digamos que queremos recuperar os registros onde o nome do animal é "elefante". Isso é muito simples, como mostra o exemplo abaixo:

SELECT 
  id, 
  name 
FROM animal
WHERE name LIKE 'elephant';

Resultado:

id name
16 elephant

Na tabela, há na verdade dois registros contendo "elefante". No entanto, o segundo registro tem dois espaços adicionais no final da palavra, portanto não é devolvido.

Vamos tentar outro padrão de texto que inclui estes dois espaços.

SELECT 
  id, 
  name 
FROM animal
WHERE name LIKE 'elephant  ';

Resultado:

id name
17 elephant. ..

Nota: ... denota dois espaços.

Novamente, há apenas um registro: "elefante" com dois espaços.

A seguir, suponhamos que utilizemos uma seqüência de texto concreta e um operador igual (=), como este:

SELECT 
  id, 
  name 
FROM animal
WHERE name = 'elephant '  ;

Resultado:

id name
16 elephant

Se você quiser verificar se uma cadeia de texto é igual ao valor de uma coluna, você está procurando por uma correspondência exata SQL em vez de uma correspondência parcial SQL. Nesse caso, use um operador igual em vez de LIKE.

Combinando os operadores NOT e LIKE

Você também pode testar para cordas que não correspondem a um padrão. Para fazer isso, combinamos os operadores LIKE e NOT. É outra forma de realizar a correspondência de padrões SQL.

No exemplo abaixo, queremos encontrar todos os nomes de animais que não têm um caracter "a":

SELECT 
  id, 
  name 
FROM animal
WHERE name NOT LIKE '%a%';

Resultado:

id name
1 frog
2 dog
4 fox
8 lion
10 sheep
12 monkey
13 lemur
15 hedgehog
19 hog
20 gerenuk
21 camel

Usando LIKE em SQL com Outros Operadores

A cláusula WHERE pode incluir mais de uma condição. Portanto, LIKE e NOT LIKE podem ser usados com outros operadores. Vejamos outro exemplo:

SELECT 
  id, 
  name 
FROM animal
WHERE name LIKE '%g'  OR name LIKE 's%'  ;

Resultado:

id name
1 frog
2 dog
10 sheep
15 hedgehog
19 hog

Ele retornou todos os nomes de animais que começam com um "s" caráter ou fim com um "g" caráter.

Usando LIKE em SQL em Outras Declarações

Até agora, discutimos o uso de LIKE em instruções SQL apenas em SELECT. Mas este operador pode ser usado em outras instruções, tais como UPDATE ou DELETE. Como você pode ver, a sintaxe é bastante similar:

UPDATE table 
SET column1 = newValue
WHERE  column2  LIKE  pattern ;
DELETE  FROM  table
WHERE  column  LIKE  pattern ;

Vamos ver como podemos usar LIKE para mudar alguns nomes de animais. Pronto?

UPDATE  animal 
SET name='tiger'
WHERE name LIKE '%key%' ;

Há apenas um registro que combina com a condição LIKE %key%: macaco. Após esta atualização, "tigre" substituirá todas as instâncias de "macaco".

Aqui está o resultado após a atualização e, em seguida, selecionar todos os registros do animal mesa.

SELECT * 
FROM  animal ;
id name
1 frog
2 dog
3 bear
4 fox
5 jaguar
6 puma
7 panda
8 lion
9 leopard
10 sheep
11 camel
12 tiger
13 lemur
14 rabbit
15 hedgehog
16 elephant
17 elephant.. .
18 langur
19 hog
20 gerenuk
21
22 null

Nota: ... denota dois espaços.

Em seguida, excluiremos qualquer registro em que o nome do animal comece com um "t”:

DELETE FROM animal
WHERE name LIKE 't%'  ;

Para saber mais sobre o SQL Pattern Matching

A correspondência de padrões SQL é muito útil para buscar substratos de texto. LIKE e seu parente próximo NOT LIKE tornam isto bastante fácil de fazer. Se você estiver interessado em aprender mais sobre a correspondência de padrões e o operador LIKE, confira o curso SQL para Iniciantes . Ele lhe mostrará como construir consultas a partir do zero, mas também introduzirá habilidades práticas como a correspondência de padrões.

Se você tem um conhecimento básico de SQL, você pode atualizá-lo com o Curso de Práticas em SQL de 88 exercícios, que vão desde tarefas simples com declarações SELECT FROM até problemas mais avançados envolvendo múltiplas subconsultas. Ou experimente nossos Trilha de Práticas em SQL pista com 5 cursos de prática SQL e mais de 600 exercícios. Inscreva-se agora de graça!