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.

  • 🔍 Kerndefinitie: Jokertekens zijn plaatsvervangers die LIKE en NOT LIKE gebruiken om tekstpatronen te matchen in plaats van exacte waarden.
  • 📊 Percentage-jokerteken: Het %-symbool komt overeen met nul of meer tekens, dus '%code%' geeft alle filmtitels weer die het woord 'code' bevatten.
  • 🔡 Onderstreep-jokerteken: Het symbool _ komt overeen met precies één teken, dus '200_' geeft titels terug die tussen 2000 en 2009 zijn uitgebracht.
  • ???? Negatieregel: NOT LIKE keert de vergelijking om en retourneert elke rij die niet aan het opgegeven patroon voldoet.
  • 🛡️ Ontsnappingsprocedure: Het trefwoord ESCAPE markeert een letterlijk % of _ binnen de zoekreeks, zodat deze als gegevens wordt behandeld.
  • Prestatie-inzicht: Een voorloopteken (%) blokkeert het gebruik van de index en dwingt een volledige tabelscan af, dus veranker patronen waar mogelijk aan de linkerkant.
  • 🧩 Methodeselectie: LIKE behandelt eenvoudige overeenkomsten tussen voorvoegsels en achtervoegsels, terwijl REGEXP zich bezighoudt met tekenklassen en afwisseling.

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.

Veelgestelde vragen

Nee, niet standaard. LIKE volgt de sortering van de kolom, en de standaard MySQL Sorteringen zijn niet hoofdlettergevoelig, dus 'code%' komt ook overeen met "CodeVoeg het trefwoord BINARY toe vóór de kolom wanneer een hoofdlettergevoelige overeenkomst vereist is.

Ja. MySQL De waarde wordt vóór de vergelijking naar een tekenreeks geconverteerd, vandaar dat `year_released LIKE '200_'` werkt. De conversie voorkomt het gebruik van een index op die kolom, dus filter met bereiken zoals `BETWEEN 2000 AND 2009` bij grote tabellen.

Nee. De lijst met tekens tussen haakjes die door sommige andere engines wordt geaccepteerd, is niet geldig binnen een MySQL Zoals in het patroon. Gebruik het REGEXP-operator Gebruik in plaats daarvan bijvoorbeeld de reguliere expressie '^[ac]' om een ​​reeks begintekens te matchen.

Ja. AI-assistenten vertalen verzoeken in gewone taal naar LIKE-patronen die je kunt uitvoeren in een client zoals... MySQL WerkbankControleer altijd het gegenereerde patroon, want het verplaatsen van slechts één %-symbool verandert welke rijen worden weergegeven.

AI-queryadviseurs lezen de EXPLAIN-uitvoer en signaleren patronen met jokertekens aan het begin die indexen overslaan. Vervolgens stellen ze alternatieven voor, zoals zoeken in de volledige tekst, een prefixpatroon of REGEXPDie moet je nog steeds controleren aan de hand van je eigen datavolumes.

Vat dit bericht samen met: