English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Operador LIKE do SQL

Neste tutorial, você aprenderá como recuperar dados com base em correspondências parciais.

Correspondência de padrão

Até agora, você já viu condições que identificam strings exatas, por exemplo, WHERE name='Lois Lane'. Mas no SQL, você também pode usar o operador LIKE para fazer correspondências parciais ou de padrão.

O operador LIKE permite que você forneça um ou mais caracteres como curingas para um padrão de correspondência. Você pode usar os seguintes curingas:

  • Porcentagem (%) - Corresponde a qualquer quantidade de caracteres, até mesmo zero.

  • Sublinhado (_) - Match completo de um caractere

Aqui estão alguns exemplos de como usar o operador LIKE com caracteres curingas.

DeclaraçãoSignificadoRetorno
WHERE name LIKE 'Da%'

procurar nomes que começam com 'Da'

David, Davidson
WHERE name LIKE '%th'procurar nomes que começam comthnomes que terminamElizabeth, Smith
WHERE name LIKE '%on%'

procurar nomes que contêm 'on'

Davidson, Toni
WHERE name LIKE 'Sa_'

procurar nomes que começam com 'Sa' e têm no máximo um caractere após

Sa
WHERE name LIKE '_oy'

procurar nomes que terminam com 'oy' e contêm no máximo um caractere

Joy, Roy
WHERE name LIKE '_an_'procurar nomes que contêmancom nomes que começam e terminam com um caractereDana, Hans
WHERE name LIKE '%ar_'procurar nomes que contêmarcom nomes que começam com qualquer número de caracteres e terminam com no máximo um caractereRichard, Karl
WHERE name LIKE '_ar%'procurar nomes que contêmarcom nomes que começam com no máximo um caractere e terminam com qualquer número de caracteresKarl, Mariya

ao buscar alguns registros, vamos aplicar a declaração discutida anteriormente na prática.

Considerando queemployeesHá uma tabela no banco de dados que contém os seguintes registros:

+--------+------------------+------------+--------+---------+
| emp_id | emp_name         | hire_date  | salary | dept_id |
+--------+------------------+------------+--------+---------+
|      1 | Ethan Hunt | 2001-05-01 |   5000 |       4 |
|      2 | Tony Montana | 2002-07-15 |   6500 |       1 |
|      3 | Sarah Connor     | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
|      5 | Martin Blank | 2008-06-24 |   5600 | NULL |
|      6 | simons bistro | 2009-04-01 |   6000 |       1 |
+--------+------------------+------------+--------+---------+

Agora, suponha que você queira encontrar todos os funcionários cujo nome começa com a letra S.

SELECT * FROM employees 
WHERE emp_name LIKE 'S%';

Após executar a consulta, você obterá a seguinte saída:

+--------+------------------+------------+--------+---------+
| emp_id | emp_name         | hire_date  | salary | dept_id |
+--------+------------------+------------+--------+---------+
|      3 | Sarah Connor     | 2005-10-18 |   8000 |       5 |
|      6 | simons bistro | 2009-04-01 |   6000 |       1 |
+--------+------------------+------------+--------+---------+

No MySQL, a comparação de strings não binárias (CHAR, VARCHAR, TEXT) é não case-sensitive por padrão, enquanto a comparação de strings binárias (BINARY, VARBINARY, BLOB) é case-sensitive.

Isso significa que, se você usar a busca WHERE name LIKE 'S%', você obterá todos os valores de colunas começando com S ou s (como você vê, temos tanto 'Sarah' quanto 'simons'). Mas, se você quiser que essa busca distinga maiúsculas e minúsculas, você pode usar o operador BINARY da seguinte forma:

-- Sintaxe para Banco de Dados MySQL 
SELECT * FROM employees 
WHERE BINARY emp_name LIKE 'S%';

Agora, esta consulta retornará apenas os funcionários cujos nomes começam com a letra S em maiúsculo:

+--------+------------------+------------+--------+---------+
| emp_id | emp_name         | hire_date  | salary | dept_id |
+--------+------------------+------------+--------+---------+
|      3 | Sarah Connor     | 2005-10-18 |   8000 |       5 |
+--------+------------------+------------+--------+---------+

Atenção:Se desejar que as colunas sejam tratadas sempre de forma case-sensitive, declare-as com regra de classificação case-sensitive ou binária para evitar problemas de desempenho.

Dica:Quando você não sabe a forma exata da string que deseja buscar, a correspondência parcial é muito útil. Você também pode usar correspondência parcial para recuperar várias linhas de uma coluna da tabela que contém strings semelhantes.