MySQL Jokertegn: Synes godt om, IKKE Synes godt om, Escape, (%), (_)
โก Smart opsummering
MySQL Jokertegn gรธr mรธnsterbaseret sรธgning mulig ved at parre LIKE- og NOT LIKE-operatorerne med specialtegn. Dette forklarer jokertegnene for procent og understregning, nรธgleordet ESCAPE, praktiske forespรธrgsler mod myflixdb-databasen og ydeevneovervejelser.

Hvad er MySQL Wildcards?
MySQL Wildcards er specialtegn, der hjรฆlper dig med at sรธge efter data, der matcher et komplekst mรธnster i stedet for en prรฆcis vรฆrdi. Jokertegn bruges altid sammen med sammenligningsoperatoren LIKE eller med sammenligningsoperatoren NOT LIKE.
MySQL understรธtter to jokertegn, og hvert enkelt besvarer et forskelligt spรธrgsmรฅl om dine data.
| Wildcard | Betydning | Eksempelmรธnster | Kampe |
|---|---|---|---|
| % | Nul (0) eller flere tegn | '%kode%' | Code Navn Black, Davinci Code |
| _ | Prรฆcis รฉt tegn | '200_' | 2005, 2008 |
Nu hvor de to karakterer er defineret, forklarer nรฆste afsnit, hvorfor de er vรฆrd at lรฆre.
Hvorfor bruge jokertegn i MySQL?
Hvis du er bekendt med SQL, tror du mรฅske, at du allerede kan sรธge efter komplekse data ved hjรฆlp af SELECT og WHERE-klausulen. Sรฅ hvorfor overhovedet bruge jokertegn?
Fรธr vi besvarer det spรธrgsmรฅl, lad os se pรฅ et eksempel. Antag, at marketingafdelingen i Myflix-videobiblioteket udfรธrte kampagner i byen Texas og gerne vil have feedback pรฅ antallet af medlemmer, der er registreret fra Texas. Du kan bruge fรธlgende SELECT-sรฆtning sammen med WHERE-klausulen for at fรฅ de รธnskede oplysninger.
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 ovenstรฅende forespรธrgsel, "WHERE-klausul" bliver lang og skrรธbelig: hver ny by skal tilfรธjes manuelt, og en enkelt forkert stavet adresse udelades lydlรธst. Brug af jokertegn forenkler forespรธrgslen, fordi et enkelt mรธnster dรฆkker hver by i staten.
SELECT * FROM members WHERE postal_address LIKE '%TX';
Kort sagt giver jokertegn dig mulighed for at indbygge effektive sรธgefunktioner i datadrevne applikationer med langt mindre SQL. I nรฆste afsnit gennemgรฅs hvert jokertegn efter tur.
Typer af MySQL Wildcards
% โ Procentdelens jokertegnet
Procenttegnet (%) bruges til at angive et mรธnster af nul (0) eller flere tegn. Den har fรธlgende grundlรฆggende syntaks.
SELECT * FROM table_name WHERE fieldname LIKE 'xxx%';
HER:
- "SELECT erklรฆring" er standard SQL SELECT-kommandoen.
- "WHERE" er det nรธgleord, der bruges til at anvende filteret.
- "LIKE" er sammenligningsoperatoren, der bruges sammen med jokertegn.
- 'xxx' er et hvilket som helst angivet mรธnster, f.eks. et enkelt tegn eller mere, og "%" matcher et hvilket som helst antal tegn startende fra nul (0).
For fuldt ud at forstรฅ ovenstรฅende udsagn, lad os se pรฅ et praktisk eksempel. Antag, at vi รธnsker at fรฅ alle de film, der har ordet "kode" som en del af titlen. Vi ville bruge procent-jokertegnet pรฅ begge sider af ordet "kode" til at udfรธre et mรธnstermatch hvor som helst i titlen.
SELECT * FROM movies WHERE title LIKE '%code%';
Udfรธrelse af ovenstรฅende script i MySQL Workbench mod myflixdb-databasen giver os resultaterne vist nedenfor.
| film_id | titel | direktรธr | รฅr_udgivet | kategori_id |
|---|---|---|---|---|
| 4 | Code Navn Sort | Edgar Jimz | 2010 | NULL |
| 7 | Davinci Code | NULL | NULL | 6 |
Bemรฆrk, at sรธgeordet "kode" returneres, uanset om det vises i begyndelsen eller slutningen af โโtitlen. Dette skyldes, at mรธnsteret tillader et hvilket som helst antal tegn fรธr "kode" og et hvilket som helst antal tegn efter det.
Lad os nu รฆndre scriptet, sรฅ procentjokertegnet kun vises i begyndelsen af โโsรธgekriterierne.
SELECT * FROM movies WHERE title LIKE '%code';
Udfรธrelse af ovenstรฅende script i MySQL Workbench mod myflixdb-databasen giver os resultaterne vist nedenfor.
| film_id | titel | direktรธr | รฅr_udgivet | kategori_id |
|---|---|---|---|---|
| 7 | Davinci Code | NULL | NULL | 6 |
Bemรฆrk, at kun รฉn post er blevet returneret. Mรธnsteret matcher et hvilket som helst antal tegn i begyndelsen af โโtitlen, men krรฆver, at titlen ende med "kode".
Lad os nu flytte procentjokertegnet til slutningen af โโmรธnsteret i stedet. Det รฆndrede script er vist nedenfor.
SELECT * FROM movies WHERE title LIKE 'code%';
Udfรธrelse af ovenstรฅende script i MySQL Workbench mod myflixdb-databasen giver os resultaterne vist nedenfor.
| film_id | titel | direktรธr | รฅr_udgivet | kategori_id |
|---|---|---|---|---|
| 4 | Code Navn Sort | Edgar Jimz | 2010 | NULL |
Kun รฉn post returneres igen, fordi dette mรธnster matcher alle titler, der starter med "kode" efterfulgt af et vilkรฅrligt antal tegn. Placeringen af โโ%-tegnet bestemmer derfor sรธgningens betydning.
๐ก Tip: Et mรธnster som 'code%' kan stadig bruge et indeks i titelkolonnen, mens '%code%' ikke kan. Et jokertegn med indledende procenter tvinger MySQL for at scanne hver rรฆkke, sรฅ behold jokertegnet til hรธjre, nรฅr sรธgningen tillader det.
_ โ Jokertegnet for understregning
Understregningen jokertegnet bruges til matcher nรธjagtigt รฉt tegnAntag, at vi vil finde alle de film, der blev udgivet i รฅrene 200x, hvor x er prรฆcis รฉt tegn, der kan vรฆre en hvilken som helst vรฆrdi. Scriptet nedenfor vรฆlger alle de film, der blev udgivet i รฅret "200x".
SELECT * FROM movies WHERE year_released LIKE '200_';
Udfรธrelse af ovenstรฅende script i MySQL Workbench mod myflixdb-databasen giver os resultaterne vist nedenfor.
| film_id | titel | direktรธr | รฅr_udgivet | kategori_id |
|---|---|---|---|---|
| 2 | Glemte Sarah Marshal | Nicholas Stoller | 2008 | 2 |
| 9 | Honey moonERS | Jhon Shultz | 2005 | 8 |
Bemรฆrk, at kun film, hvis year_release-vรฆrdi er 200 efterfulgt af et enkelt tegn, returneres. I modsรฆtning til jokertegnet med procentvise tegn reserverer understregningen en plads til รฉt tegn og ikke mere.
IKKE SOM med jokertegn
Den logiske operator NOT kan bruges sammen med jokertegn til at returnere de rรฆkker, der ikke ikke matche det angivne mรธnster.
Antag, at vi รธnsker de film, der ikke blev udgivet i รฅrene 200x. Vi kombinerer den logiske operator NOT med jokertegnet understregning, som vist nedenfor.
SELECT * FROM movies WHERE year_released NOT LIKE '200_';
| film_id | titel | direktรธr | รฅr_udgivet | kategori_id |
|---|---|---|---|---|
| 1 | Pirates of the Caribean 4 | Rob Marshall | 2011 | 1 |
| 4 | Code Navn Sort | Edgar Jimz | 2010 | NULL |
| 8 | Underverden-AwakenPrint | Michael Eal | 2012 | 6 |
Kun de film, der ikke fรธlger 200x-mรธnsteret, returneres, fordi NOT inverterer resultatet af jokertegnssammenligningen. Bemรฆrk, at rรฆkker, der indeholder en NULL vรฆrdi returneres aldrig af LIKE eller NOT LIKE, da NULL er ukendt snarere end ulige.
ESCAPE-nรธgleord
Nรธgleordet ESCAPE er vant til Tegn der matcher flugtmรธnstre sรฅsom procentdelen (%) og understregningen (_), nรฅr de udgรธr en del af selve dataene.
Antag, at vi vil sรธge efter den litterale streng "67%". Vi deklarerer et escape-tegn og placerer det umiddelbart fรธr det tegn, der skal lรฆses som data.
LIKE '67#%%' ESCAPE '#';
Hvis vi vil finde filmen โ67% Guiltyโ, kan vi bruge manuskriptet vist nedenfor.
SELECT * FROM movies WHERE title LIKE '67#%%' ESCAPE '#';
Bemรฆrk den dobbelte "%%" i LIKE-klausulen. Den fรธrste indledes af escape-tegnet (#) og behandles derfor som en del af den streng, der sรธges efter. Den anden beholder sin jokertegnbetydning og matcher et hvilket som helst antal tegn, der fรธlger.
Ethvert tegn kan fungere som escape-tegn, sรฅ den samme forespรธrgsel fungerer ogsรฅ med lighedstegnet.
SELECT * FROM movies WHERE title LIKE '67=%%' ESCAPE '=';
Jokertegn dรฆkker simple mรธnstre rigtig godt, men nogle sรธgninger krรฆver mere udtryksfulde regler. Sammenligningen nedenfor viser, hvor grรฆnsen ligger.
MySQL Wildcards vs. REGEXP: hvilken skal du bruge?
MySQL understรธtter kun to jokertegn. Tegnlister som [ac], som nogle andre databaseprogrammer accepterer i LIKE, understรธttes ikke. Nรฅr en sรธgning krรฆver tegnintervaller, alternering eller forankring, vil REGEXP-operator er det rigtige valg.
| Kriterium | LIKE med jokertegn | REGEXP |
|---|---|---|
| Mรธnsterstyrke | Kun to symboler: % og _ | Tegnklasser, intervaller, vekslen, gentagelse |
| Typisk brug | Sรธgninger efter prรฆfiks, suffiks eller "indeholder" | Validering, kompleks matchning, flere alternativer |
| Indeksbrug | Muligt nรฅr mรธnsteret ikke starter med % | Bruger aldrig et indeks |
| Lรฆsbarhed | Enkel for begyndere | Stejlere indlรฆringskurve |
Som regel skal du fรธrst bruge LIKE: det er lettere at lรฆse, og det er den eneste af de to, der kan drage fordel af et indeks. Skift til REGEXP, nรฅr et enkelt mรธnster skal udtrykke flere alternativer, for eksempel at matche hver titel, der starter med et ciffer. Begge operatorer er skrivebeskyttede sammenligninger, sรฅ ingen af โโdem รฆndrer de rรฆkker, der returneres af INSERT or OPDATER udsagn; de filtrerer kun det, som WHERE-klausulen vรฆlger.
