MySQL Jokertekens: Like, NOT Like, Escape, ( %), ( _ )
⚡ Slimme samenvatting
MySQL Jokertekens maken patroongebaseerd zoeken mogelijk door de operatoren LIKE en NOT LIKE te combineren met speciale tekens. Dit verklaart de wildcards voor procenttekens en underscores, het trefwoord ESCAPE, praktische zoekopdrachten in de myflixdb-database en prestatieoverwegingen.

Wat zijn MySQL Wildcards?
MySQL wildcards Jokertekens zijn speciale tekens die je helpen bij het zoeken naar gegevens die overeenkomen met een complex patroon in plaats van een exacte waarde. Jokertekens worden altijd gebruikt in combinatie met de vergelijkingsoperator LIKE of met de vergelijkingsoperator NOT LIKE.
MySQL Ondersteunt twee jokertekens, en elk teken beantwoordt een andere vraag over uw gegevens.
| wildcard | Betekenis | Voorbeeldpatroon | Lucifers |
|---|---|---|---|
| % | Nul (0) of meer tekens | '%code%' | Code Naam: Black, Davinci Code |
| _ | Precies één teken | '200_' | 2005, 2008 |
Nu de twee karakters zijn gedefinieerd, wordt in het volgende gedeelte uitgelegd waarom het de moeite waard is om ze te leren kennen.
Waarom jokers gebruiken in MySQL?
Als je bekend bent met SQL, denk je misschien dat je al met SELECT en de WHERE-clausule naar complexe gegevens kunt zoeken. Waarom zou je dan überhaupt wildcards gebruiken?
Voordat we die vraag beantwoorden, laten we eerst een voorbeeld bekijken. Stel dat de marketingafdeling van de Myflix-videotheek promoties heeft gehouden in de stad Texas en graag feedback wil over het aantal leden dat zich vanuit Texas heeft geregistreerd. Je kunt de volgende SELECT-instructie in combinatie met de WHERE-clausule gebruiken om de gewenste informatie te verkrijgen.
SELECT * FROM members WHERE postal_address = 'Austin, TX' OR postal_address = 'Dallas, TX' OR postal_address = 'Iola, TX' OR postal_address = 'Houston, TX';
Zoals u uit de bovenstaande vraag kunt zien, is de “WHERE-clausuleDe zoekopdracht wordt lang en onnauwkeurig: elke nieuwe stad moet handmatig worden toegevoegd en een enkel verkeerd gespeld adres wordt stilzwijgend uitgesloten. Het gebruik van wildcards vereenvoudigt de zoekopdracht, omdat één patroon alle steden in de staat dekt.
SELECT * FROM members WHERE postal_address LIKE '%TX';
Kort gezegd, met behulp van jokertekens kunt u krachtige zoekfuncties in datagestuurde applicaties integreren met aanzienlijk minder SQL. In het volgende gedeelte wordt elk jokerteken afzonderlijk besproken.
Types van MySQL wildcards
% – Het percentage-jokerteken
Het procentteken (%) wordt gebruikt om een patroon aan te geven. nul (0) of meer tekens. Het heeft de volgende basis-syntaxis.
SELECT * FROM table_name WHERE fieldname LIKE 'xxx%';
HIER:
- "SELECT-instructie" is de standaard SQL SELECT-opdracht.
- “WHERE” is het sleutelwoord waarmee het filter wordt toegepast.
- “LIKE” is de vergelijkingsoperator die in combinatie met jokertekens wordt gebruikt.
- 'xxx' staat voor een specifiek patroon, zoals een enkel teken of meer, en "%" komt overeen met een willekeurig aantal tekens, beginnend bij nul (0).
Om bovenstaande stelling volledig te begrijpen, kijken we naar een praktisch voorbeeld. Stel dat we alle films willen vinden die het woord 'code' in de titel hebben. We zouden het procentteken (jokerteken) aan beide kanten van het woord 'code' gebruiken om een patroonvergelijking uit te voeren, waar dan ook in de titel.
SELECT * FROM movies WHERE title LIKE '%code%';
Voer het bovenstaande script uit in MySQL Werkbank Een vergelijking met de myflixdb-database levert de onderstaande resultaten op.
| film_id | titel | directeur | jaar_uitgebracht | categorie ID |
|---|---|---|---|---|
| 4 | Code Naam Zwart | Edgar Jimz | 2010 | NULL |
| 7 | Davinci Code | NULL | NULL | 6 |
Merk op dat het zoekwoord 'code' wordt weergegeven, ongeacht of het aan het begin of aan het einde van de titel staat. Dit komt doordat het patroon een willekeurig aantal tekens vóór en na 'code' toestaat.
Laten we het script nu aanpassen zodat het procentteken alleen aan het begin van de zoekcriteria verschijnt.
SELECT * FROM movies WHERE title LIKE '%code';
Voer het bovenstaande script uit in MySQL Workbench levert bij gebruik van de myflixdb-database de onderstaande resultaten op.
| film_id | titel | directeur | jaar_uitgebracht | categorie ID |
|---|---|---|---|---|
| 7 | Davinci Code | NULL | NULL | 6 |
Merk op dat er slechts één record is geretourneerd. Het patroon komt overeen met een willekeurig aantal tekens aan het begin van de titel, maar vereist dat de titel aan bepaalde criteria voldoet. einde met “code”.
Laten we het procentteken nu naar het einde van het patroon verplaatsen. Het aangepaste script ziet er als volgt uit.
SELECT * FROM movies WHERE title LIKE 'code%';
Voer het bovenstaande script uit in MySQL Workbench levert bij gebruik van de myflixdb-database de onderstaande resultaten op.
| film_id | titel | directeur | jaar_uitgebracht | categorie ID |
|---|---|---|---|---|
| 4 | Code Naam Zwart | Edgar Jimz | 2010 | NULL |
Er wordt slechts één record geretourneerd, omdat dit patroon overeenkomt met elke titel die starts met “code” gevolgd door een willekeurig aantal tekens. De positie van het %-symbool bepaalt dus de betekenis van de zoekopdracht.
💡Tip: Een patroon zoals 'code%' kan nog steeds een index op de titelkolom gebruiken, terwijl '%code%' dat niet kan. Een voorloopteken met een procentteken dwingt dit af. MySQL Om elke rij te scannen, moet u het jokerteken aan de rechterkant behouden wanneer de zoekopdracht dit toelaat.
_ – De underscore-jokerteken
Hiervoor wordt het onderstrepingsteken gebruikt komen precies overeen met één tekenStel dat we alle films willen vinden die zijn uitgebracht in het jaar 200x, waarbij x een enkel teken is dat elke willekeurige waarde kan aannemen. Het onderstaande script selecteert alle films die zijn uitgebracht in het jaar "200x".
SELECT * FROM movies WHERE year_released LIKE '200_';
Voer het bovenstaande script uit in MySQL Workbench levert bij gebruik van de myflixdb-database de onderstaande resultaten op.
| film_id | titel | directeur | jaar_uitgebracht | categorie ID |
|---|---|---|---|---|
| 2 | Sarah Marshal vergeten | Nicholas Stoller | 2008 | 2 |
| 9 | Honey mooners | Jhon Shultz | 2005 | 8 |
Merk op dat alleen films worden weergegeven waarvan het jaartal 200 is, gevolgd door een willekeurig teken. In tegenstelling tot het procentteken reserveert de underscore een plaats voor één teken en niet meer.
NIET ZOALS bij wildcards
De logische operator NOT kan samen met jokertekens worden gebruikt om de rijen te retourneren die wél aan de voorwaarden voldoen. niet Het opgegeven patroon moet overeenkomen.
Stel dat we de films willen die niet in de jaren 200x zijn uitgebracht. We combineren de logische operator NOT met het underscore-jokerteken, zoals hieronder weergegeven.
SELECT * FROM movies WHERE year_released NOT LIKE '200_';
| film_id | titel | directeur | jaar_uitgebracht | categorie ID |
|---|---|---|---|---|
| 1 | Piraten van het Caribisch gebied 4 | Rob Marshall | 2011 | 1 |
| 4 | Code Naam Zwart | Edgar Jimz | 2010 | NULL |
| 8 | Onderwereld-Awakenafdrukken | Michael Eal | 2012 | 6 |
Alleen de films die niet het 200x-patroon volgen, worden geretourneerd, omdat NOT het resultaat van de vergelijking met de wildcard omkeert. Merk op dat rijen met een NULL De waarden LIKE of NOT LIKE retourneren nooit een waarde, omdat NULL onbekend is en niet ongelijk.
ESCAPE-trefwoord
Het ESCAPE-sleutelwoord wordt gebruikt ontsnap aan patroonherkenningskarakters zoals het percentage (%) en het underscore-teken (_) wanneer deze deel uitmaken van de gegevens zelf.
Stel dat we willen zoeken naar de letterlijke tekenreeks "67%". We declareren een escape-teken en plaatsen dit direct vóór het teken dat als data moet worden gelezen.
LIKE '67#%%' ESCAPE '#';
Als we de film "67% Guilty" willen vinden, kunnen we het onderstaande script gebruiken.
SELECT * FROM movies WHERE title LIKE '67#%%' ESCAPE '#';
Let op de dubbele "%%" in de LIKE-clausule. De eerste wordt voorafgegaan door het escape-teken (#) en wordt daarom beschouwd als onderdeel van de te doorzoeken tekenreeks. De tweede behoudt zijn jokerteken-functie en komt overeen met een willekeurig aantal tekens dat erop volgt.
Elk teken kan als escape-teken dienen, dus dezelfde query werkt ook met het gelijkheidsteken.
SELECT * FROM movies WHERE title LIKE '67=%%' ESCAPE '=';
Jokertekens werken prima voor eenvoudige patronen, maar sommige zoekopdrachten vereisen meer expliciete regels. De onderstaande vergelijking laat zien waar de grens ligt.
MySQL Wildcards versus reguliere expressies: welke moet je gebruiken?
MySQL Ondersteunt slechts twee jokertekens. Tekenlijsten zoals [ac], die sommige andere database-engines binnen LIKE accepteren, worden niet ondersteund. Wanneer een zoekopdracht tekenbereiken, alternatie of verankering vereist, REGEXP-operator is de juiste keuze.
| Criterium | Zoals met jokers | REGEXP |
|---|---|---|
| Patroonkracht | Slechts twee symbolen: % en _ | Karakterklassen, bereiken, afwisseling, herhaling |
| Typisch gebruik | Zoekopdrachten met voorvoegsel, achtervoegsel of 'bevat' | Validatie, complexe matching, meerdere alternatieven |
| Indexgebruik | Mogelijk wanneer het patroon niet met een % begint. | Gebruikt nooit een index |
| leesbaarheid | Eenvoudig voor beginners | Steilere leercurve |
Gebruik in de regel eerst LIKE: het is gemakkelijker te lezen en het is de enige van de twee die baat kan hebben bij een index. Ga over op REGEXP wanneer een enkel patroon meerdere alternatieven moet uitdrukken, bijvoorbeeld om elke titel te matchen die met een cijfer begint. Beide operatoren zijn alleen-lezen vergelijkingen, dus geen van beide wijzigt de rijen die door LIKE worden geretourneerd. INSERT or UPDATE verklaringen; ze filteren alleen wat de WHERE-clausule selecteert.
