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.

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.
