sql >> Database >  >> RDS >> Mysql

Hoe de LIKE-operator werkt in MySQL

In MySQL is de LIKE operator voert patroonovereenkomst uit met behulp van een SQL-patroon.

Als de tekenreeks overeenkomt met het opgegeven patroon, is het resultaat 1 , anders is het 0 .

Het patroon hoeft niet per se een letterlijke tekenreeks te zijn. Deze functie kan worden gebruikt met tekenreeksuitdrukkingen en tabelkolommen.

Syntaxis

De syntaxis gaat als volgt:

expr LIKE pat [ESCAPE 'escape_char']

Waar expr is de invoerreeks en pat is het patroon waarvoor u de snaar test.

De optionele ESCAPE clausule kunt u een escape-teken specificeren. Het standaard escape-teken is \ , dus u kunt deze clausule weglaten als u deze niet hoeft te wijzigen.

Voorbeeld 1 – Basisgebruik

Hier is een voorbeeld van het gebruik van deze operator in een SELECT verklaring:

SELECT 'Charlie' LIKE 'Char%';

Resultaat:

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

In dit geval is de retourwaarde 1 wat betekent dat de invoerreeks overeenkomt met het patroon. In het bijzonder hebben we gespecificeerd dat de invoerreeks moet beginnen met Char en eindigen met iets. De % teken komt overeen met een willekeurig aantal tekens (inclusief nul tekens).

Dit is wat er gebeurt als we de % . laten vallen :

SELECT 'Charlie' LIKE 'Char';

Resultaat:

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

Het resultaat is 0 wat betekent dat er geen match is. Dit komt omdat we geen jokerteken hebben gebruikt om andere tekens op te geven.

Voorbeeld 2 – De _ Jokerteken

We hebben ook de mogelijkheid om de _ . te gebruiken jokerteken om slechts één teken op te geven. Hier is een voorbeeld:

SELECT 'Charlie' LIKE 'Ch_rlie';

Resultaat:

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

De twee jokertekens kunnen indien nodig in een patroon worden gecombineerd:

SELECT 'Charlie likes donuts' LIKE 'Ch_rlie%' AS 'Result';

Resultaat:

+--------+
| Result |
+--------+
|      1 |
+--------+

Hier zijn er nog meer:

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';

Resultaat:

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

Laten we wat wijzigingen aanbrengen in dat voorbeeld, zodat we enkele voorbeelden kunnen zien van wanneer ze niet overeenkomen:

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';

Resultaat:

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

Voorbeeld 3 – Een databasevoorbeeld

De LIKE operator wordt vaak gebruikt binnen een WHERE clausule van een SELECT statement bij het opvragen van een database. Wanneer het op deze manier wordt gebruikt, worden de resultaten beperkt tot alleen die records die overeenkomen, maar we zien de daadwerkelijke resultaten (niet alleen een 1 of 0 ).

Hier is een voorbeeld van hoe we deze operator kunnen gebruiken binnen een databasequery:

SELECT ArtistId, ArtistName
FROM Artists
WHERE ArtistName LIKE 'B%';

Resultaat:

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

In dit geval was het een eenvoudige zoekopdracht die alle artiesten retourneert wiens namen beginnen met de letter B .

Hier is de volledige lijst van artiesten in die tabel:

SELECT ArtistId, ArtistName
FROM Artists;

Resultaat:

+----------+------------------------+
| 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                |
+----------+------------------------+

Voorbeeld 4 – Ontsnappen met het backslash-teken

Wat gebeurt er als een van de jokertekens in uw invoerreeks staat en u er een overeenkomst tegen moet uitvoeren? U kunt er ontsnappen met het backslash-teken (\ ). Hier is een voorbeeld van zo'n zoekopdracht met en zonder het escape-teken:

SELECT 
  'usr_123' LIKE 'usr_123' AS 'Without escape',
  'usr_123' LIKE 'usr\_123' AS 'With escape';

Resultaat:

+----------------+-------------+
| Without escape | With escape |
+----------------+-------------+
|              1 |           1 |
+----------------+-------------+

In dit geval kwamen ze allebei overeen, maar om verschillende redenen. De eerste regel komt overeen omdat het jokerteken aangeeft dat elk teken overeenkomt. De tweede regel kwam ook overeen, maar alleen omdat de invoerstring op de juiste plaats een onderstrepingsteken had.

Laten we de invoerstring iets veranderen zodat we een ander resultaat krijgen:

SELECT 
  'usr+123' LIKE 'usr_123' AS 'Without escape',
  'usr+123' LIKE 'usr\_123' AS 'With escape';

Resultaat:

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

De unescaped-versie keerde positief terug, omdat de wildcard betekende dat we elk personage op die plek konden hebben. De escape-versie vermeldde expliciet dat alleen het onderstrepingsteken (_ ) zal overeenkomen. De invoerreeks had geen onderstrepingsteken op die plek en dus was het resultaat negatief.

Voorbeeld 5 – De ESCAPE Clausule

U kunt ook de ESCAPE . gebruiken clausule om uw eigen aangepaste escape-teken op te geven. Hier is een voorbeeld:

SELECT 
  'usr_123' LIKE 'usr|_123' ESCAPE '|' AS 'String 1',
  'usr+123' LIKE 'usr|_123' ESCAPE '|' AS 'String 2';

Resultaat:

+----------+----------+
| String 1 | String 2 |
+----------+----------+
|        1 |        0 |
+----------+----------+

Voorbeeld 6 – Numerieke uitdrukkingen

De MySQL-implementatie van de LIKE operator staat toe dat numerieke uitdrukkingen worden gebruikt. Hier is een voorbeeld:

SELECT 
  1234 LIKE '12%',
  1234 LIKE '12_';

Resultaat:

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

  1. MAA-documentatie voor de Oracle Cloud

  2. Bulksgewijs invoegen in Oracle-database:wat is beter:VOOR Cursorlus of een eenvoudige Select?

  3. tabel wijzigen kolom wijzigen in Oracle-database

  4. Vragen die u moet stellen voordat u een database start