MySQL Jokertecken: Gilla, INTE Gilla, Escape, (%), (_)

⚡ Smart sammanfattning

MySQL Jokertecken möjliggör mönsterbaserad sökning genom att para ihop operatorerna LIKE och NOT LIKE med specialtecken. Detta förklarar jokertecknen för procent och understreck, nyckelordet ESCAPE, praktiska frågor mot myflixdb-databasen och prestandaaspekter.

  • 🔍 Kärndefinition: Jokertecken är platshållartecken som LIKE och NOT LIKE använder för att matcha textmönster istället för exakta värden.
  • 📊 Procentuell jokertecken: Symbolen % matchar noll eller fler tecken, så '%code%' returnerar varje filmtitel som innehåller ordet kod.
  • 🔡 Understrykningswildcard: Symbolen _ matchar exakt ett tecken, så '200_' returnerar titlar som släpptes mellan 2000 och 2009.
  • ???? Negationsregel: INTE GILLAR inverterar jämförelsen och returnerar varje rad som inte uppfyller det angivna mönstret.
  • 🛡️ Hantering av flykt: Nyckelordet ESCAPE markerar ett bokstavligt % eller _ inuti söksträngen så att den behandlas som data.
  • ⚡ Prestandainsikt: Ett inledande % blockerar indexanvändning och tvingar fram en fullständig tabellskanning, så förankra mönster till vänster när det är möjligt.
  • 🧩 Metodval: LIKE täcker enkel prefix- och suffixmatchning, medan REGEXP hanterar teckenklasser och alternering.

Vad är MySQL Jokertecken?

MySQL joker~~POS=TRUNC är specialtecken som hjälper dig att söka efter data som matchar ett komplext mönster istället för ett exakt värde. Jokertecken används alltid tillsammans med jämförelseoperatorn LIKE eller med jämförelseoperatorn NOT LIKE.

MySQL stöder två jokertecken, och vart och ett besvarar en annan fråga om dina data.

Wildcard Betydelse Exempelmönster Matcher
% Noll (0) eller fler tecken '%koda%' Code Namn Black, Davinci Code
_ Exakt ett tecken 200_ 2005, 2008

Nu när de två karaktärerna är definierade förklarar nästa avsnitt varför de är värda att lära sig.

Varför använda jokertecken i MySQL?

Om du är bekant med SQL kanske du tror att du redan kan söka efter komplex data med hjälp av SELECT och WHERE-klausulen. Så varför använda jokertecken överhuvudtaget?

Innan vi besvarar den frågan, låt oss titta på ett exempel. Anta att marknadsavdelningen på Myflix-videobiblioteket genomförde kampanjer i Texas och vill ha feedback på antalet medlemmar som registrerat sig från Texas. Du kan använda följande SELECT-sats tillsammans med WHERE-satsen för att få önskad information.

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 från ovanstående fråga, "VAR klausul” blir långt och ömtåligt: ​​varje ny stad måste läggas till manuellt, och en enda felstavad adress utesluts tyst. Att använda jokertecken förenklar frågan, eftersom ett enda mönster täcker varje stad i delstaten.

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

Kort sagt, jokertecken låter dig bygga in kraftfulla sökfunktioner i datadrivna applikationer med betydligt mindre SQL. Nästa avsnitt bryter ner varje jokertecken i tur och ordning.

Typer av MySQL joker~~POS=TRUNC

% – Jokertecknet för procentandelen

Procenttecknet (%) används för att ange ett mönster av noll (0) eller fler tecken. Den har följande grundläggande syntax.

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

HÄR:

  • "SELECT-sats” är standardkommandot för SQL SELECT.
  • ”WHERE” är nyckelordet som används för att tillämpa filtret.
  • ”LIKE” är jämförelseoperatorn som används tillsammans med jokertecken.
  • 'xxx' är ett specificerat mönster, till exempel ett enskilt tecken eller mer, och "%" matchar valfritt antal tecken från noll (0).

För att fullt ut förstå ovanstående påstående, låt oss titta på ett praktiskt exempel. Anta att vi vill få alla filmer som har ordet "kod" som en del av titeln. Vi skulle använda procentuellt jokerteckne på båda sidor om ordet "kod" för att utföra en mönstermatchning var som helst i titeln.

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

Exekvera skriptet ovan i MySQL Arbetsbänk mot myflixdb-databasen ger oss resultaten som visas nedan.

movie_id rubricerade direktör year_released kategori_id
4 Code Namn Svart Edgar Jimz 2010 NULL
7 Davinci Code NULL NULL 6

Observera att sökordet ”kod” returneras oavsett om det visas i början eller slutet av titeln. Detta beror på att mönstret tillåter valfritt antal tecken före ”kod” och valfritt antal tecken efter det.

Låt oss nu ändra skriptet så att jokertecknet för procent endast visas i början av sökkriterierna.

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

Exekvera skriptet ovan i MySQL Workbench mot myflixdb-databasen ger oss resultaten som visas nedan.

movie_id rubricerade direktör year_released kategori_id
7 Davinci Code NULL NULL 6

Observera att endast en post har returnerats. Mönstret matchar valfritt antal tecken i början av titeln men kräver att titeln änden med "kod".

Låt oss nu flytta procentjokertecknet till slutet av mönstret istället. Det modifierade skriptet visas nedan.

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

Exekvera skriptet ovan i MySQL Workbench mot myflixdb-databasen ger oss resultaten som visas nedan.

movie_id rubricerade direktör year_released kategori_id
4 Code Namn Svart Edgar Jimz 2010 NULL

Endast en post returneras igen, eftersom detta mönster matchar varje titel som startar med ”kod” följt av valfritt antal tecken. Positionen för %-tecknet avgör därför sökningens betydelse.

💡 Tips: Ett mönster som 'code%' kan fortfarande använda ett index i titelkolumnen, medan '%code%' inte kan det. Ett jokertecken för inledande procenttal tvingar fram MySQL för att skanna varje rad, så behåll jokertecknet till höger närhelst sökningen tillåter det.

_ – Jokertecknet för understreck

Understrecket jokertecken används för att matcha exakt ett teckenAntag att vi vill hitta alla filmer som släpptes under åren 200x, där x är exakt ett tecken som kan vara vilket värde som helst. Skriptet nedan väljer alla filmer som släpptes under år "200x".

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

Exekvera skriptet ovan i MySQL Workbench mot myflixdb-databasen ger oss resultaten som visas nedan.

movie_id rubricerade direktör year_released kategori_id
2 Att glömma Sarah Marshal Nicholas Stoller 2008 2
9 Honey moonERS Jhon Shultz 2005 8

Observera att endast filmer vars year_released-värde är 200 följt av ett enskilt tecken returneras. Till skillnad från jokertecknet i procent reserverar understrecket en plats för ett tecken och inte mer.

INTE SOM med jokertecken

Den logiska operatorn NOT kan användas tillsammans med jokertecken för att returnera rader som inte inte matcha det angivna mönstret.

Anta att vi vill ha filmerna som inte släpptes under åren 200x. Vi kombinerar den logiska operatorn NOT med jokertecknet understreck, som visas nedan.

SELECT * FROM movies
WHERE year_released NOT LIKE '200_';
movie_id rubricerade direktör year_released kategori_id
1 Pirates of the Caribean 4 Rob Marshall 2011 1
4 Code Namn Svart Edgar Jimz 2010 NULL
8 Undre världen-Awakeni H Michael Eal 2012 6

Endast filmer som inte följer 200x-mönstret returneras, eftersom NOT inverterar resultatet av jokerteckensjämförelse. Observera att rader som innehåller en NULL värde returneras aldrig av LIKE eller NOT LIKE, eftersom NULL är okänt snarare än olikt.

ESCAPE-nyckelord

Nyckelordet ESCAPE används för att tecken som matchar escape-mönster såsom procentandelen (%) och understrecket (_) när de ingår i själva informationen.

Anta att vi vill söka efter den litterala strängen "67%". Vi deklarerar ett escape-tecken och placerar det omedelbart före tecknet som måste läsas som data.

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

Om vi ​​vill hitta filmen "67% Guilty" kan vi använda manuset som visas nedan.

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

Observera den dubbla "%%" i LIKE-klausulen. Den första föregås av escape-tecknet (#) och behandlas därför som en del av den sträng som söks efter. Den andra behåller sin jokerteckens betydelse och matchar valfritt antal tecken som följer.

Vilket tecken som helst kan fungera som escape-tecken, så samma fråga fungerar även med likhetstecknet.

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

Jokertecken täcker enkla mönster mycket bra, men vissa sökningar behöver mer uttrycksfulla regler. Jämförelsen nedan visar var gränsen går.

MySQL Jokertecken kontra REGEXP: vilket ska du använda?

MySQL stöder endast två jokertecken. Teckenlistor som [ac], som vissa andra databasmotorer accepterar i LIKE, stöds inte. När en sökning behöver teckenintervall, alternering eller förankring, REGEXP-operatorn är rätt val.

Kriterium GILLA med jokertecken REGEXP
Mönsterkraft Endast två symboler: % och _ Teckenklasser, intervall, alternering, repetition
Typisk användning Prefix-, suffix- eller "innehåller"-sökningar Validering, komplex matchning, flera alternativ
Indexanvändning Möjligt när mönstret inte börjar med % Använder aldrig ett index
läsbarhet Enkelt för nybörjare Brantare inlärningskurva

Som regel bör du först använda LIKE: det är lättare att läsa, och det är det enda av de två som kan dra nytta av ett index. Gå över till REGEXP när ett enda mönster måste uttrycka flera alternativ, till exempel att matcha varje titel som börjar med en siffra. Båda operatorerna är skrivskyddade jämförelser, så ingen av dem ändrar raderna som returneras av INFOGA or UPPDATERING uttalanden; de filtrerar bara det som WHERE-klausulen väljer.

Vanliga frågor

Nej, inte som standard. LIKE följer kolumnens sortering, och standarden MySQL Sorteringar är inte skiftlägeskänsliga, så 'code%' matchar även "CodeLägg till nyckelordet BINARY före kolumnen när en skiftlägeskänslig matchning krävs.

Ja. MySQL konverterar värdet till en sträng innan det jämförs, vilket är anledningen till att year_released LIKE '200_' fungerar. Konverteringen förhindrar indexanvändning på den kolumnen, så filtrera med intervall som BETWEEN 2000 AND 2009 på stora tabeller.

Nej. Listan med tecken inom parentes som accepteras av vissa andra motorer är inte giltig inom en MySQL GILLA-mönstret. Använd REGEXP-operatorn istället, till exempel titel REGEXP '^[ac]', för att matcha ett intervall av starttecken.

Ja. AI-assistenter översätter förfrågningar i enkelt språk till LIKE-mönster som du kan köra i en klient, till exempel MySQL ArbetsbänkGranska alltid det genererade mönstret, eftersom om man flyttar en enskild %-symbol ändras vilka rader som returneras.

AI-frågerådgivare läser EXPLAIN-utdata och flaggar inledande jokerteckenmönster som hoppar över index. De föreslår sedan alternativ som fulltextsökning, ett prefixmönster eller REGEXP, vilket du fortfarande behöver validera mot dina egna datavolymer.

Sammanfatta detta inlägg med: