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.

  • 🔍 Ydinmääritelmä: Jokerimerkit ovat paikkamerkkimerkkejä, joita LIKE ja NOT LIKE käyttävät tekstikuvioiden yhdistämiseen tarkkojen arvojen sijaan.
  • 📊 Prosenttiosuuden jokerimerkki: %-symboli vastaa nollaa tai useampaa merkkiä, joten '%code%' palauttaa jokaisen elokuvan nimen, joka sisältää sanan code.
  • 🔡 Alleviivausjokerimerkki: Symboli _ vastaa täsmälleen yhtä merkkiä, joten '200_' palauttaa vuosina 2000–2009 julkaistut teokset.
  • 🚫 Negaatiosääntö: NOT LIKE kääntää vertailun ja palauttaa jokaisen rivin, joka ei noudata määritettyä kaavaa.
  • 🛡️ Pakotilanteiden käsittely: ESCAPE-avainsana merkitsee literaalin % tai _ hakumerkkijonon sisällä, jotta sitä käsitellään datana.
  • Suorituskykytiedot: Johtava prosentti estää indeksin käytön ja pakottaa koko taulukon skannauksen, joten ankkurointikuviot vasemmalle aina kun mahdollista.
  • 🧩 Menetelmän valinta: LIKE kattaa yksinkertaisen etuliitteiden ja päätteiden yhteensovittamisen, kun taas REGEXP käsittelee merkistöluokat ja vuorottelun.

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.

UKK

Ei, ei oletuksena. LIKE seuraa sarakkeen lajittelua ja standardi MySQL Lajitteluissa kirjainkoko ei ole merkitsevä, joten 'code%' vastaa myös “Code". Lisää BINARY-avainsana sarakkeen eteen, kun vaaditaan kirjainkoon huomioiva vastine.

Kyllä. MySQL muuntaa arvon merkkijonoksi ennen sen vertailua, minkä vuoksi year_released toimii LIKE '200_' -funktion tavoin. Muunnos estää indeksin käytön kyseisessä sarakkeessa, joten käytä suurissa taulukoissa suodatusalueita, kuten BETWEEN 2000 AND 2009.

Ei. Joidenkin muiden hakukoneiden hyväksymä hakasulkeissa oleva merkkiluettelo ei ole kelvollinen MySQL LIKE-kuvio. Käytä REGEXP-operaattori sen sijaan, esimerkiksi otsikko REGEXP '^[ac]', löytääkseen joukon aloitusmerkkejä.

Kyllä. Tekoälyavustajat kääntävät selkokieliset pyynnöt LIKE-malleiksi, joita voit suorittaa asiakasohjelmassa, kuten MySQL TyöpöytäTarkista aina luotu kuvio, koska yhden %-symbolin siirtäminen muuttaa palautettavia rivejä.

Tekoälykyselyiden neuvonantajat lukevat EXPLAIN-tulosteen ja merkitsevät jokerimerkkikuvioita, jotka ohittavat indeksit. Sitten ne ehdottavat vaihtoehtoja, kuten kokotekstihakua, etuliitekuviota tai Säännöllinen lauseke, joka sinun on vielä validoitava omia datamääriäsi vasten.

Tiivistä tämä viesti seuraavasti: