Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como o operador LIKE funciona no MySQL


No MySQL, o LIKE O operador executa a correspondência de padrões usando um padrão SQL.

Se a string corresponder ao padrão fornecido, o resultado será 1 , caso contrário é 0 .

O padrão não precisa necessariamente ser uma string literal. Esta função pode ser usada com expressões de string e colunas de tabela.


Sintaxe


A sintaxe fica assim:
expr LIKE pat [ESCAPE 'escape_char']

Onde expr é a string de entrada e pat é o padrão para o qual você está testando a string.

O opcional ESCAPE cláusula permite que você especifique um caractere de escape. O caractere de escape padrão é \ , então você pode omitir esta cláusula se não precisar alterá-la.

Exemplo 1 – Uso básico


Aqui está um exemplo de como usar este operador em um SELECT demonstração:
SELECT 'Charlie' LIKE 'Char%';

Resultado:
+------------------------+
| 'Charlie' LIKE 'Char%' |
+------------------------+
|                      1 |
+------------------------+

Neste caso, o valor de retorno é 1 o que significa que a string de entrada correspondeu ao padrão. Especificamente, especificamos que a string de entrada deve começar com Char e terminar com qualquer coisa. O % caractere corresponde a qualquer número de caracteres (incluindo zero caracteres).

Veja o que acontece se descartarmos o % :
SELECT 'Charlie' LIKE 'Char';

Resultado:
+-----------------------+
| 'Charlie' LIKE 'Char' |
+-----------------------+
|                     0 |
+-----------------------+

O resultado de retorno é 0 o que significa que não há correspondência. Isso ocorre porque não usamos um caractere curinga para especificar outros caracteres.

Exemplo 2 – O _ Curinga


Também temos a opção de usar o _ caractere curinga para especificar apenas um único caractere. Aqui está um exemplo:
SELECT 'Charlie' LIKE 'Ch_rlie';

Resultado:
+--------------------------+
| 'Charlie' LIKE 'Ch_rlie' |
+--------------------------+
|                        1 |
+--------------------------+

Os dois caracteres curinga podem ser combinados em um padrão, se necessário:
SELECT 'Charlie likes donuts' LIKE 'Ch_rlie%' AS 'Result';

Resultado:
+--------+
| Result |
+--------+
|      1 |
+--------+

Aqui estão mais alguns:
SELECT 
  'Charlie likes donuts' LIKE 'Ch_rlie%donuts' AS 'Result 1',
  'Charlie likes donuts' LIKE 'Ch_rlie%nuts' AS 'Result 2',
  'Charlie likes donuts' LIKE 'Ch%rlie %likes %' AS 'Result 3',
  'Charlie likes donuts' LIKE '% likes %' AS 'Result 4';

Resultado:
+----------+----------+----------+----------+
| Result 1 | Result 2 | Result 3 | Result 4 |
+----------+----------+----------+----------+
|        1 |        1 |        1 |        1 |
+----------+----------+----------+----------+

Vamos fazer algumas alterações nesse exemplo para que possamos ver alguns exemplos de quando eles não correspondem:
SELECT 
  'Charlie likes donuts' LIKE 'Ch%rlie_donuts' AS 'Result 1',
  'Charlie likes donuts' LIKE 'Charlie_nuts' AS 'Result 2',
  'Charlie likes donuts' LIKE 'Charlie _likes donuts' AS 'Result 3',
  'Charlie likes donuts' LIKE '_ likes _' AS 'Result 4';

Resultado:
+----------+----------+----------+----------+
| Result 1 | Result 2 | Result 3 | Result 4 |
+----------+----------+----------+----------+
|        0 |        0 |        0 |        0 |
+----------+----------+----------+----------+

Exemplo 3 – Um exemplo de banco de dados


O LIKE O operador geralmente é usado dentro de um WHERE cláusula de um SELECT declaração ao consultar um banco de dados. Quando usado dessa maneira, ele restringe os resultados apenas aos registros que correspondem, mas vemos os resultados reais (não apenas um 1 ou 0 ).

Aqui está um exemplo de como podemos usar esse operador em uma consulta de banco de dados:
SELECT ArtistId, ArtistName
FROM Artists
WHERE ArtistName LIKE 'B%';

Resultado:
+----------+----------------+
| ArtistId | ArtistName     |
+----------+----------------+
|        4 | Buddy Rich     |
|       11 | Black Sabbath  |
|       15 | Birds of Tokyo |
|       16 | Bodyjar        |
+----------+----------------+

Neste caso, foi uma consulta simples que retorna todos os artistas cujos nomes começam com a letra B .

Aqui está a lista completa de artistas nessa tabela:
SELECT ArtistId, ArtistName
FROM Artists;

Resultado:
+----------+------------------------+
| ArtistId | ArtistName             |
+----------+------------------------+
|        1 | Iron Maiden            |
|        2 | AC/DC                  |
|        3 | Allan Holdsworth       |
|        4 | Buddy Rich             |
|        5 | Devin Townsend         |
|        6 | Jim Reeves             |
|        7 | Tom Jones              |
|        8 | Maroon 5               |
|        9 | The Script             |
|       10 | Lit                    |
|       11 | Black Sabbath          |
|       12 | Michael Learns to Rock |
|       13 | Carabao                |
|       14 | Karnivool              |
|       15 | Birds of Tokyo         |
|       16 | Bodyjar                |
+----------+------------------------+

Exemplo 4 – Fuga com o caractere de barra invertida


O que acontece se um dos caracteres curinga estiver em sua string de entrada e você precisar fazer uma correspondência com ele? Você pode escapar com o caractere de barra invertida (\ ). Aqui está um exemplo de uma pesquisa com e sem o caractere de escape:
SELECT 
  'usr_123' LIKE 'usr_123' AS 'Without escape',
  'usr_123' LIKE 'usr\_123' AS 'With escape';

Resultado:
+----------------+-------------+
| Without escape | With escape |
+----------------+-------------+
|              1 |           1 |
+----------------+-------------+

Neste caso, ambos combinaram, mas por razões diferentes. A primeira linha correspondeu porque o curinga especificou que qualquer caractere corresponderá. A segunda linha também correspondeu, mas apenas porque a string de entrada tinha um sublinhado no lugar certo.

Vamos alterar um pouco a string de entrada para obtermos um resultado diferente:
SELECT 
  'usr+123' LIKE 'usr_123' AS 'Without escape',
  'usr+123' LIKE 'usr\_123' AS 'With escape';

Resultado:
+----------------+-------------+
| Without escape | With escape |
+----------------+-------------+
|              1 |           0 |
+----------------+-------------+

A versão sem escape retornou positivo, porque o curinga significava que poderíamos ter qualquer personagem naquele local. A versão com escape declarou explicitamente que apenas o caractere sublinhado (_ ) corresponderá. A string de entrada não tinha um caractere de sublinhado nesse ponto e, portanto, o resultado foi negativo.

Exemplo 5 – O ESCAPE Cláusula


Você também pode usar o ESCAPE cláusula para especificar seu próprio caractere de escape personalizado. Aqui está um exemplo:
SELECT 
  'usr_123' LIKE 'usr|_123' ESCAPE '|' AS 'String 1',
  'usr+123' LIKE 'usr|_123' ESCAPE '|' AS 'String 2';

Resultado:
+----------+----------+
| String 1 | String 2 |
+----------+----------+
|        1 |        0 |
+----------+----------+

Exemplo 6 – Expressões Numéricas


A implementação do MySQL do LIKE operador permite que expressões numéricas sejam usadas. Aqui está um exemplo:
SELECT 
  1234 LIKE '12%',
  1234 LIKE '12_';

Resultado:
+-----------------+-----------------+
| 1234 LIKE '12%' | 1234 LIKE '12_' |
+-----------------+-----------------+
|               1 |               0 |
+-----------------+-----------------+