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.

  • ๐Ÿ” Kernedefinition: Jokertegn er pladsholdertegn, som LIKE og NOT LIKE bruger til at matche tekstmรธnstre i stedet for nรธjagtige vรฆrdier.
  • ๐Ÿ“Š Procentuel jokertegn: Symbolet % matcher nul eller flere tegn, sรฅ '%code%' returnerer alle filmtitler, der indeholder ordet kode.
  • ๐Ÿ”ก Understregning af jokertegn: Symbolet _ matcher prรฆcis รฉt tegn, sรฅ '200_' returnerer titler udgivet mellem 2000 og 2009.
  • ๐Ÿšซ Negationsregel: NOT LIKE inverterer sammenligningen og returnerer hver rรฆkke, der ikke opfylder det angivne mรธnster.
  • ๐Ÿ›ก๏ธ Hรฅndtering af flugt: ESCAPE-nรธgleordet markerer et bogstaveligt % eller _ inde i sรธgestrengen, sรฅ den behandles som data.
  • โšก Indsigt i ydeevne: En foranstillet % blokerer for indeksbrug og gennemtvinger en fuld tabelscanning, sรฅ forankre mรธnstre til venstre, nรฅr det er muligt.
  • ๐Ÿงฉ Metodevalg: LIKE dรฆkker simpel prรฆfiks- og suffiksmatchning, mens REGEXP hรฅndterer tegnklasser og alternering.

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.

Ofte Stillede Spรธrgsmรฅl

Nej, ikke som standard. LIKE fรธlger sorteringen af โ€‹โ€‹kolonnen, og standarden MySQL Sorteringer skelner ikke mellem store og smรฅ bogstaver, sรฅ 'code%' matcher ogsรฅ โ€œCode". Tilfรธj nรธgleordet BINARY fรธr kolonnen, nรฅr et match med forskel pรฅ store og smรฅ bogstaver er pรฅkrรฆvet.

Ja. MySQL konverterer vรฆrdien til en streng fรธr den sammenlignes, hvilket er grunden til, at year_released LIKE '200_' fungerer. Konverteringen forhindrer indeksbrug pรฅ den kolonne, sรฅ filtrer med intervaller som BETWEEN 2000 AND 2009 pรฅ store tabeller.

Nej. Tegnlisten i parentes, der accepteres af nogle andre sรธgemaskiner, er ikke gyldig inden for en MySQL LIKE-mรธnsteret. Brug REGEXP-operator i stedet for eksempel titel REGEXP '^[ac]', for at matche et interval af starttegn.

Ja. AI-assistenter oversรฆtter anmodninger i letforstรฅeligt sprog til LIKE-mรธnstre, som du kan kรธre i en klient, f.eks. MySQL WorkbenchGennemgรฅ altid det genererede mรธnster, da flytning af et enkelt %-symbol รฆndrer, hvilke rรฆkker der returneres.

AI-forespรธrgselsrรฅdgivere lรฆser EXPLAIN-output og markerer foranstillede jokertegnmรธnstre, der springer indeks over. De foreslรฅr derefter alternativer sรฅsom fuldtekstsรธgning, et prรฆfiksmรธnster eller REGEXP, som du stadig skal validere i forhold til dine egne datamรฆngder.

Opsummer dette indlรฆg med: