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

