MySQL Jokertegn: Liker, IKKE Liker, Escape, (%), (_)

⚡ Smart oppsummering

MySQL Jokertegn gjør mønsterbasert søking mulig ved å koble LIKE- og NOT LIKE-operatorene med spesialtegn. Dette forklarer prosent- og understrekningsjokertegnene, ESCAPE-nøkkelordet, praktiske spørringer mot myflixdb-databasen og ytelseshensyn.

  • 🔍 Kjernedefinisjon: Jokertegn er plassholdertegn som LIKE og NOT LIKE bruker for å matche tekstmønstre i stedet for eksakte verdier.
  • 📊 Prosentvis jokertegn: %-symbolet samsvarer med null eller flere tegn, så «%code%» returnerer alle filmtitteler som inneholder ordet kode.
  • 🔡 Understrekningsjokertegn: Symbolet _ samsvarer med nøyaktig ett tegn, så «200_» returnerer titler utgitt mellom 2000 og 2009.
  • 🚫 Negasjonsregel: IKKE LIKER inverterer sammenligningen og returnerer hver rad som ikke oppfyller det angitte mønsteret.
  • 🛡️ Håndtering av rømning: ESCAPE-nøkkelordet markerer en bokstavelig % eller _ inne i søkestrengen, slik at den behandles som data.
  • Ytelsesinnsikt: En innledende % blokkerer indeksbruk og tvinger frem en fullstendig tabellskanning, så forankre mønstre til venstre når det er mulig.
  • 🧩 Metodevalg: LIKE dekker enkel prefiks- og suffiksmatching, mens REGEXP håndterer tegnklasser og alternering.

Hva er MySQL Jokertegn?

MySQL joker~~POS=TRUNC er spesialtegn som hjelper deg med å søke etter data som samsvarer med et komplekst mønster i stedet for en eksakt verdi. Jokertegn brukes alltid sammen med sammenligningsoperatoren LIKE eller med sammenligningsoperatoren NOT LIKE.

MySQL støtter to jokertegn, og hvert av dem svarer på et annet spørsmål om dataene dine.

Wildcard Betydning Eksempelmønster Fyrstikker
% Null (0) eller flere tegn '%kode%' Code Navn Svart, Davinci Code
_ Nøyaktig ett tegn '200_' 2005, 2008

Nå som de to karakterene er definert, forklarer neste avsnitt hvorfor de er verdt å lære.

Hvorfor bruke jokertegn i MySQL?

Hvis du er kjent med SQL, tror du kanskje at du allerede kan søke etter komplekse data ved hjelp av SELECT og WHERE-klausulen. Så hvorfor bruke jokertegn i det hele tatt?

Før vi svarer på det spørsmålet, la oss se på et eksempel. Anta at markedsføringsavdelingen til Myflix-videobiblioteket gjennomførte kampanjer i byen Texas og ønsker tilbakemelding på antall medlemmer som registrerte seg fra Texas. Du kan bruke følgende SELECT-setning sammen med WHERE-klausulen for å få ønsket informasjon.

SELECT * FROM members
WHERE postal_address = 'Austin, TX'
   OR postal_address = 'Dallas, TX'
   OR postal_address = 'Iola, TX'
   OR postal_address = 'Houston, TX';

Som du kan se fra søket ovenfor, "HVOR klausul«blir lang og skjør: hver nye by må legges til manuelt, og en enkelt feilstavet adresse utelates i stillhet. Bruk av jokertegn forenkler spørringen, fordi et enkelt mønster dekker hver by i staten.

SELECT * FROM members
WHERE postal_address LIKE '%TX';

Kort sagt, jokertegn lar deg bygge kraftige søkefunksjoner inn i datadrevne applikasjoner med langt mindre SQL. Neste avsnitt bryter ned hvert jokertegn etter tur.

Typer av MySQL joker~~POS=TRUNC

% – Jokertegnet for prosentandelen

Prosenttegnet (%) brukes til å angi et mønster av null (0) eller flere tegn. Den har følgende grunnleggende syntaks.

SELECT * FROM table_name
WHERE fieldname LIKE 'xxx%';

HER:

  • "SELECT-setning«er standard SQL SELECT-kommandoen.»
  • «HVOR» er nøkkelordet som brukes for å bruke filteret.
  • «LIKE» er sammenligningsoperatoren som brukes sammen med jokertegn.
  • 'xxx' er et hvilket som helst spesifisert mønster, for eksempel et enkelt tegn eller mer, og «%» samsvarer med et hvilket som helst antall tegn som starter fra null (0).

For å forstå utsagnet ovenfor fullt ut, la oss se på et praktisk eksempel. Anta at vi ønsker å få alle filmene som har ordet «kode» som en del av tittelen. Vi ville bruke prosentvis jokertegnet på begge sider av ordet «kode» for å utføre et mønstersamsvar hvor som helst i tittelen.

SELECT * FROM movies
WHERE title LIKE '%code%';

Utfører skriptet ovenfor i MySQL Workbench mot myflixdb-databasen gir oss resultatene vist nedenfor.

movie_id tittel direktør år_utgitt kategori_id
4 Code Navn Svart Edgar Jimz 2010 NULL
7 Da Vinci Code NULL NULL 6

Legg merke til at søkeordet «kode» returneres enten det vises i begynnelsen eller på slutten av tittelen. Dette er fordi mønsteret tillater et hvilket som helst antall tegn før «kode» og et hvilket som helst antall tegn etter det.

La oss nå endre skriptet slik at prosentjokertegnet bare vises i begynnelsen av søkekriteriene.

SELECT * FROM movies
WHERE title LIKE '%code';

Utfører skriptet ovenfor i MySQL Workbench mot myflixdb-databasen gir oss resultatene vist nedenfor.

movie_id tittel direktør år_utgitt kategori_id
7 Da Vinci Code NULL NULL 6

Legg merke til at bare én post er returnert. Mønsteret samsvarer med et hvilket som helst antall tegn i begynnelsen av tittelen, men krever at tittelen slutt med «kode».

La oss nå flytte prosentjokertegnet til slutten av mønsteret i stedet. Det modifiserte skriptet vises nedenfor.

SELECT * FROM movies
WHERE title LIKE 'code%';

Utfører skriptet ovenfor i MySQL Workbench mot myflixdb-databasen gir oss resultatene vist nedenfor.

movie_id tittel direktør år_utgitt kategori_id
4 Code Navn Svart Edgar Jimz 2010 NULL

Bare én post returneres igjen, fordi dette mønsteret samsvarer med alle titlene som starter med «kode» etterfulgt av et valgfritt antall tegn. Plasseringen av %-tegnet bestemmer derfor betydningen av søket.

💡 Tips: Et mønster som «code%» kan fortsatt bruke en indeks i tittelkolonnen, mens «%code%» ikke kan det. Et jokertegn for ledende prosent fremtvinger MySQL for å skanne hver rad, så behold jokertegnet til høyre når søket tillater det.

_ – Jokertegnet for understrekningen

Understrek-jokertegnet brukes til samsvarer med nøyaktig ett tegnAnta at vi ønsker å finne alle filmene som ble utgitt i årene 200x, hvor x er nøyaktig ett tegn som kan være en hvilken som helst verdi. Skriptet nedenfor velger alle filmene som ble utgitt i året «200x».

SELECT * FROM movies
WHERE year_released LIKE '200_';

Utfører skriptet ovenfor i MySQL Workbench mot myflixdb-databasen gir oss resultatene vist nedenfor.

movie_id tittel direktør år_utgitt kategori_id
2 Glemte Sarah Marshal Nicholas barnevogn 2008 2
9 Honey moonERS Jhon Shultz 2005 8

Merk at bare filmer med en year_released-verdi på 200 etterfulgt av et enkelt tegn returneres. I motsetning til prosentjokertegnet reserverer understrekningen en plass til ett tegn og ikke mer.

IKKE SOM med jokertegn

Den logiske operatoren NOT kan brukes sammen med jokertegn for å returnere radene som ikke gjør det. ikke samsvare med det angitte mønsteret.

Anta at vi ønsker filmene som ikke ble utgitt i årene 200x. Vi kombinerer den logiske operatoren NOT med jokertegnet understrek, som vist nedenfor.

SELECT * FROM movies
WHERE year_released NOT LIKE '200_';
movie_id tittel direktør år_utgitt kategori_id
1 Pirates of the Caribean 4 Rob Marshall 2011 1
4 Code Navn Svart Edgar Jimz 2010 NULL
8 Underverden-Awakenskrive ut Michael Eal 2012 6

Bare filmene som ikke følger 200x-mønsteret returneres, fordi NOT inverterer resultatet av jokertegnsammenligningen. Merk at rader som inneholder en NULL verdi returneres aldri av LIKE eller NOT LIKE, siden NULL er ukjent snarere enn ulik.

ESCAPE-nøkkelord

Nøkkelordet ESCAPE er vant til escape-mønster-matching-tegn som prosentandelen (%) og understrekingen (_) når de er en del av selve dataene.

Anta at vi vil søke etter den litterale strengen «67 %». Vi deklarerer et escape-tegn og plasserer det rett foran tegnet som må leses som data.

LIKE '67#%%' ESCAPE '#';

Hvis vi vil finne filmen «67% Guilty», kan vi bruke manuset som vises nedenfor.

SELECT * FROM movies
WHERE title LIKE '67#%%' ESCAPE '#';

Legg merke til den doble «%%» i LIKE-klausulen. Den første innledes av escape-tegnet (#) og behandles derfor som en del av strengen det søkes etter. Den andre beholder jokertegnbetydningen og samsvarer med et hvilket som helst antall tegn som følger.

Ethvert tegn kan fungere som escape-tegn, så den samme spørringen fungerer også med likhetstegnet.

SELECT * FROM movies
WHERE title LIKE '67=%%' ESCAPE '=';

Jokertegn dekker enkle mønstre veldig bra, men noen søk trenger mer uttrykksfulle regler. Sammenligningen nedenfor viser hvor grensen går.

MySQL Jokertegn vs. REGEXP: hvilken bør du bruke?

MySQL støtter bare to jokertegn. Tegnlister som [ac], som noen andre databasemotorer godtar i LIKE, støttes ikke. Når et søk trenger tegnområder, alternering eller forankring, vil REGEXP-operator er det riktige valget.

Criterion LIKE med jokertegn REGEXP
Mønsterkraft Kun to symboler: % og _ Tegnklasser, rekkevidde, veksling, repetisjon
Typisk bruk Søk etter prefiks, suffiks eller «inneholder» Validering, kompleks matching, flere alternativer
Indeksbruk Mulig når mønsteret ikke begynner med % Bruker aldri en indeks
lesbarhet Enkelt for nybegynnere Brattere læringskurve

Som regel bør du bruke LIKE først: det er lettere å lese, og det er det eneste av de to som kan dra nytte av en indeks. Gå til REGEXP når et enkelt mønster må uttrykke flere alternativer, for eksempel å matche hver tittel som begynner med et siffer. Begge operatorene er skrivebeskyttede sammenligninger, så ingen av dem endrer radene som returneres av INSERT or OPPDATERING utsagn; de filtrerer bare det WHERE-klausulen velger.

Spørsmål og svar

Nei, ikke som standard. LIKE følger sorteringen av kolonnen, og standarden MySQL Sorteringer skiller ikke mellom store og små bokstaver, så 'code%' samsvarer også med «CodeLegg til nøkkelordet BINARY før kolonnen når det kreves et treff som skiller mellom store og små bokstaver.

Ja. MySQL konverterer verdien til en streng før den sammenlignes, og det er derfor year_released LIKE '200_' fungerer. Konverteringen forhindrer indeksbruk på den kolonnen, så filtrer med områder som BETWEEN 2000 AND 2009 på store tabeller.

Nei. Listen over tegn i parenteser som aksepteres av noen andre motorer er ikke gyldig i en MySQL LIKE-mønsteret. Bruk REGEXP-operator i stedet, for eksempel tittel REGEXP '^[ac]', for å matche et område med starttegn.

Ja. AI-assistenter oversetter forespørsler i enkeltspråk til LIKE-mønstre som du kan kjøre i en klient, for eksempel MySQL WorkbenchSjekk alltid det genererte mønsteret, fordi flytting av et enkelt %-symbol endrer hvilke rader som returneres.

AI-spørringsrådgivere leser EXPLAIN-utdata og flagger innledende jokertegnmønstre som hopper over indekser. Deretter foreslår de alternativer som fulltekstsøk, et prefiksmønster eller REGEXP, som du fortsatt må validere mot dine egne datavolumer.

Oppsummer dette innlegget med: