MySQL Jokerimerkit: Tykkää, EI Tykkää, Esc, ( %) , ( _ )
⚡ Älykäs yhteenveto
MySQL Jokerimerkit mahdollistavat kaavapohjaisen haun yhdistämällä LIKE- ja NOT LIKE -operaattorit erikoismerkkeihin. Tämä selittää prosentti- ja alaviivajokerimerkit, ESCAPE-avainsanan, käytännön kyselyt myflixdb-tietokantaa vasten ja suorituskykyyn liittyvät näkökohdat.

Mitä ovat MySQL Jokerimerkit?
MySQL Jokerimerkit ovat erikoismerkkejä, joiden avulla voit etsiä tietoja, jotka vastaavat monimutkaista kuviota tarkan arvon sijaan. Jokerimerkkejä käytetään aina yhdessä LIKE-vertailuoperaattorin tai NOT LIKE-vertailuoperaattorin kanssa.
MySQL tukee kahta jokerimerkkiä, ja kukin niistä vastaa eri kysymykseen tiedoistasi.
| Jokeri | Merkitys | Esimerkkikuvio | Tulitikut |
|---|---|---|---|
| % | Nolla (0) tai useampi merkki | '%koodi%' | Code Nimi Black, Davinci Code |
| _ | Tasan yksi merkki | 200_ | 2005, 2008 |
Nyt kun nämä kaksi hahmoa on määritelty, seuraavassa osiossa selitetään, miksi ne ovat oppimisen arvoisia.
Miksi käyttää jokerimerkkejä MySQL?
Jos olet perehtynyt SQL:ään, saatat ajatella, että voit jo etsiä mitä tahansa monimutkaista dataa käyttämällä SELECT-operaattoria ja WHERE-lauseketta. Miksi siis käyttää jokerimerkkejä ollenkaan?
Ennen kuin vastaamme tähän kysymykseen, tarkastellaan esimerkkiä. Oletetaan, että Myflix-videokirjaston markkinointiosasto toteuttaa kampanjoita Texasin kaupungissa ja haluaisi palautetta Texasista rekisteröityneiden jäsenten määrästä. Voit käyttää seuraavaa SELECT-lausetta yhdessä WHERE-lauseen kanssa saadaksesi halutut tiedot.
SELECT * FROM members WHERE postal_address = 'Austin, TX' OR postal_address = 'Dallas, TX' OR postal_address = 'Iola, TX' OR postal_address = 'Houston, TX';
Kuten yllä olevasta kyselystä näet, "WHERE-lauseke” tulee pitkäksi ja hauraaksi: jokainen uusi kaupunki on lisättävä käsin, ja yksikin väärin kirjoitettu osoite suljetaan pois hiljaa. Jokerimerkkien käyttö yksinkertaistaa kyselyä, koska yksi malli kattaa kaikki osavaltion kaupungit.
SELECT * FROM members WHERE postal_address LIKE '%TX';
Lyhyesti sanottuna jokerimerkkien avulla voit rakentaa tehokkaita hakutoimintoja datapohjaisiin sovelluksiin huomattavasti vähemmällä SQL:llä. Seuraavassa osiossa eritellään jokainen jokerimerkki vuorollaan.
Tyyppisiä MySQL Jokerimerkit
% – Prosenttiosuuden jokerimerkki
Prosenttimerkkiä (%) käytetään määrittämään kuvio nolla (0) tai enemmän merkkiä. Siinä on seuraava perussyntaksi.
SELECT * FROM table_name WHERE fieldname LIKE 'xxx%';
TÄSTÄ:
- "SELECT-lause” on SQL:n vakiomuotoinen SELECT-komento.
- ”WHERE” on avainsana, jota käytetään suodattimen käyttämiseen.
- ”LIKE” on vertailuoperaattori, jota käytetään yhdessä jokerimerkkien kanssa.
- 'xxx' on mikä tahansa määritetty kuvio, kuten yksi tai useampi merkki, ja "%" vastaa mitä tahansa määrää merkkejä alkaen nollasta (0).
Ymmärtääksemme täysin yllä olevan väitteen, tarkastellaan käytännön esimerkkiä. Oletetaan, että haluamme löytää kaikki elokuvat, joiden nimessä on sana "koodi". Käyttäisimme sanan "koodi" molemmin puolin olevaa prosenttijokerimerkkiä suorittaaksemme kaavan täsmäytyksen missä tahansa nimessä.
SELECT * FROM movies WHERE title LIKE '%code%';
Suoritetaan yllä oleva komentosarja MySQL Työpöytä myflixdb-tietokantaa vasten antaa meille alla näkyvät tulokset.
| elokuvan_tunnus | otsikko | johtaja | vuosi_vapautettu | kategorian_tunnus |
|---|---|---|---|---|
| 4 | Code Nimi Musta | Edgar Jimz | 2010 | NULL |
| 7 | DaVinci Code | NULL | NULL | 6 |
Huomaa, että hakusana ”koodi” palautetaan riippumatta siitä, esiintyykö se otsikon alussa vai lopussa. Tämä johtuu siitä, että malli sallii minkä tahansa määrän merkkejä ennen ”koodia” ja minkä tahansa määrän merkkejä sen jälkeen.
Muokataan nyt skriptiä siten, että prosenttijokerimerkki näkyy vain hakukriteerien alussa.
SELECT * FROM movies WHERE title LIKE '%code';
Suoritetaan yllä oleva komentosarja MySQL Workbenchin vertailu myflixdb-tietokantaa vasten antaa meille alla näkyvät tulokset.
| elokuvan_tunnus | otsikko | johtaja | vuosi_vapautettu | kategorian_tunnus |
|---|---|---|---|---|
| 7 | DaVinci Code | NULL | NULL | 6 |
Huomaa, että palautettu on vain yksi tietue. Malli vastaa mitä tahansa määrää merkkejä otsikon alussa, mutta vaatii otsikon loppu "koodilla".
Siirretään nyt prosenttijokerimerkki kuvion loppuun. Muokattu skripti näkyy alla.
SELECT * FROM movies WHERE title LIKE 'code%';
Suoritetaan yllä oleva komentosarja MySQL Workbenchin vertailu myflixdb-tietokantaa vasten antaa meille alla näkyvät tulokset.
| elokuvan_tunnus | otsikko | johtaja | vuosi_vapautettu | kategorian_tunnus |
|---|---|---|---|---|
| 4 | Code Nimi Musta | Edgar Jimz | 2010 | NULL |
Vain yksi tietue palautetaan uudelleen, koska tämä malli vastaa kaikkia otsikoita, jotka alkaa jossa on ”koodi” ja sen jälkeen mikä tahansa määrä merkkejä. %-symbolin sijainti siis määrää haun merkityksen.
💡 Vinkki: Malli, kuten 'code%', voi edelleen käyttää indeksiä otsikkosarakkeessa, kun taas '%code%' ei voi. Johtava prosenttijokerimerkki pakottaa MySQL skannataksesi jokaisen rivin, joten pidä jokerimerkki oikealla aina, kun haku sen sallii.
_ – Alaviivan jokerimerkki
Alaviivaa jokerimerkkiä käytetään vastaa täsmälleen yhtä merkkiäOletetaan, että haluamme löytää kaikki vuonna 200x julkaistut elokuvat, missä x on täsmälleen yksi merkki, joka voi olla mikä tahansa arvo. Alla oleva skripti valitsee kaikki vuonna ”200x” julkaistut elokuvat.
SELECT * FROM movies WHERE year_released LIKE '200_';
Suoritetaan yllä oleva komentosarja MySQL Workbenchin vertailu myflixdb-tietokantaa vasten antaa meille alla näkyvät tulokset.
| elokuvan_tunnus | otsikko | johtaja | vuosi_vapautettu | kategorian_tunnus |
|---|---|---|---|---|
| 2 | Sarah Marshal unohdetaan | Nicholas Stoller | 2008 | 2 |
| 9 | Honey mooners | Jhon Shultz | 2005 | 8 |
Huomaa, että palautetaan vain elokuvat, joiden julkaisuvuoden arvo on 200 ja sen perässä on jokin yksi merkki. Toisin kuin prosenttijokerimerkki, alaviiva varaa paikan yhdelle merkille eikä enempää.
EI NIINKUIN jokerimerkeillä
Loogista operaattoria NOT voidaan käyttää yhdessä jokerimerkkien kanssa palauttamaan rivit, jotka eivät emme vastaa määritettyä kuviota.
Oletetaan, että haluamme elokuvat, joita ei julkaistu vuosina 200x. Yhdistämme NOT-loogisen operaattorin alaviivan jokerimerkkiin, kuten alla on esitetty.
SELECT * FROM movies WHERE year_released NOT LIKE '200_';
| elokuvan_tunnus | otsikko | johtaja | vuosi_vapautettu | kategorian_tunnus |
|---|---|---|---|---|
| 1 | Pirates of the Caribbean 4 | Rob Marshall | 2011 | 1 |
| 4 | Code Nimi Musta | Edgar Jimz | 2010 | NULL |
| 8 | Alamaailma-AwakenTulosta | Michael Eal | 2012 | 6 |
Vain ne elokuvat, jotka eivät noudata 200x-kuviota, palautetaan, koska NOT kääntää jokerimerkkivertailun tuloksen. Huomaa, että rivit, joilla on NULL LIKE- tai NOT LIKE-operaattorit eivät koskaan palauta arvoa, koska NULL on tuntematon eikä epätasainen.
ESCAPE-avainsana
ECAPE-avainsanaa käytetään Escape-kuviota vastaavat merkit kuten prosenttiosuus (%) ja alaviiva (_), kun ne ovat osa itse dataa.
Oletetaan, että haluamme etsiä literaalimerkkijonoa ”67%”. Määrittelemme ohjausmerkin ja sijoitamme sen välittömästi datana luettavan merkin eteen.
LIKE '67#%%' ESCAPE '#';
Jos haluamme löytää elokuvan ”67% syyllinen”, voimme käyttää alla olevaa käsikirjoitusta.
SELECT * FROM movies WHERE title LIKE '67#%%' ESCAPE '#';
Huomaa LIKE-lausekkeen kaksinkertainen ”%%”-merkki. Ensimmäistä edeltää ohjausmerkki (#), joten sitä käsitellään osana etsittävää merkkijonoa. Toinen säilyttää jokerimerkki-merkityksensä ja löytää vastauksen useille sitä seuraaville merkeille.
Mikä tahansa merkki voi toimia koodinvaihtomerkkinä, joten sama kysely toimii myös yhtäsuuruusmerkin kanssa.
SELECT * FROM movies WHERE title LIKE '67=%%' ESCAPE '=';
Jokerimerkit kattavat yksinkertaiset kuviot erittäin hyvin, mutta jotkin haut tarvitsevat selkeämpiä sääntöjä. Alla oleva vertailu osoittaa, missä raja kulkee.
MySQL Jokerimerkit vs. säännölliset lausekkeet: kumpaa kannattaa käyttää?
MySQL tukee vain kahta jokerimerkkiä. Merkkiluetteloita, kuten [ac], joita jotkin muut tietokantamoottorit hyväksyvät LIKE-luettelon sisällä, ei tueta. Kun haku tarvitsee merkkialueita, vuorottelua tai ankkurointia, REGEXP-operaattori on oikea valinta.
| Kriteeri | TYKKÄÄ jokerimerkeillä | Säännöllinen lauseke |
|---|---|---|
| Kuviovoima | Vain kaksi symbolia: % ja _ | Merkkiluokat, -alueet, vuorottelu, toisto |
| Tyypillinen käyttö | Etuliite-, jälkiliite- tai ”sisältää”-haut | Validointi, monimutkainen yhteensovitus, useita vaihtoehtoja |
| Indeksin käyttö | Mahdollinen, kun kuvio ei ala merkillä % | Ei koskaan käytä indeksiä |
| luettavuus | Yksinkertainen aloittelijoille | Jyrkempi oppimiskäyrä |
Yleensä kannattaa ensin käyttää LIKE-operaattoria: sitä on helpompi lukea, ja se on ainoa näistä kahdesta, joka voi hyötyä indeksistä. Siirry REGEXP-operaattoriin, kun yhden mallin on ilmaistava useita vaihtoehtoja, esimerkiksi kaikkien numerolla alkavien otsikoiden täsmääminen. Molemmat operaattorit ovat vain luku -vertailuja, joten kumpikaan ei muuta funktion palauttamia rivejä. INSERT or PÄIVITYS lausekkeet; ne suodattavat vain sen, mitä WHERE-lauseke valitsee.
