English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Neste tutorial, você aprenderá como recuperar dados com base em correspondências parciais.
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ção | Significado | Retorno |
---|---|---|
WHERE name LIKE 'Da%' | procurar nomes que começam com 'Da' | David, Davidson |
WHERE name LIKE '%th' | procurar nomes que começam comthnomes que terminam | Elizabeth, 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 caractere | Dana, 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 caractere | Richard, 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 caracteres | Karl, 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.