MySQL Helyettesítő karakterek: Like, NEM Like, Escape, ( % ), ( _ )
⚡ Okos összefoglaló
MySQL A helyettesítő karakterek lehetővé teszik a minta alapú keresést a LIKE és NOT LIKE operátorok speciális karakterekkel való párosításával. Ez elmagyarázza a százalékos és aláhúzásjeles helyettesítő karaktereket, az ESCAPE kulcsszót, a myflixdb adatbázissal kapcsolatos gyakorlati lekérdezéseket és a teljesítménybeli szempontokat.

Mik MySQL Helyettesítő karakterek?
MySQL Helyettesítő karakterek A helyettesítő karakterek speciális karakterek, amelyek segítenek egy összetett mintázatnak megfelelő adatok keresésében a pontos érték helyett. A helyettesítő karaktereket mindig a LIKE vagy a NOT LIKE összehasonlító operátorral együtt használjuk.
MySQL két helyettesítő karaktert támogat, és mindegyik egy másik kérdésre ad választ az adataival kapcsolatban.
| Helyettesítő | Jelentés | Példaminta | Gyufa |
|---|---|---|---|
| % | Nulla (0) vagy több karakter | '%kód%' | Code Név: Black, Davinci Code |
| _ | Pontosan egy karakter | '200_' | 2005, 2008 |
Most, hogy a két karaktert definiáltuk, a következő rész elmagyarázza, miért érdemes megtanulni őket.
Miért érdemes helyettesítő karaktereket használni? MySQL?
Ha ismered az SQL-t, azt gondolhatod, hogy már bármilyen összetett adatot kereshetsz a SELECT és a WHERE záradék használatával. Akkor miért használnánk egyáltalán helyettesítő karaktereket?
Mielőtt megválaszolnánk ezt a kérdést, nézzünk egy példát. Tegyük fel, hogy a Myflix videotéka marketingosztálya promóciókat hajt végre Texas városában, és visszajelzést szeretne kapni a Texasból regisztrált tagok számáról. A kívánt információk megszerzéséhez a következő SELECT utasítást használhatja a WHERE záradékkal együtt.
SELECT * FROM members WHERE postal_address = 'Austin, TX' OR postal_address = 'Dallas, TX' OR postal_address = 'Iola, TX' OR postal_address = 'Houston, TX';
Amint a fenti lekérdezésből látható, a „WHERE záradék„hosszúvá és törékennyé válik: minden új várost kézzel kell hozzáadni, és egyetlen elgépeléses címet csendben kizár a rendszer. A helyettesítő karakterek használata leegyszerűsíti a lekérdezést, mivel egyetlen minta lefedi az állam összes városát.
SELECT * FROM members WHERE postal_address LIKE '%TX';
Röviden, a helyettesítő karakterek lehetővé teszik, hogy hatékony keresési funkciókat építsünk be adatvezérelt alkalmazásokba sokkal kevesebb SQL-lel. A következő szakasz sorban lebontja az egyes helyettesítő karaktereket.
Típusok MySQL Helyettesítő karakterek
% – A százalékos helyettesítő karakter
A százalékos (%) karakterrel a mintázatot adhatjuk meg. nulla (0) vagy több karakter. A következő alapvető szintaxissal rendelkezik.
SELECT * FROM table_name WHERE fieldname LIKE 'xxx%';
ITT:
- "SELECT utasításA „” a szabványos SQL SELECT parancs.
- A „WHERE” kulcsszóval alkalmazzák a szűrőt.
- A „LIKE” egy összehasonlító operátor, amelyet a helyettesítő karakterekkel együtt használnak.
- Az „xxx” tetszőleges megadott minta lehet, például egy vagy több karakter, a „%” pedig tetszőleges számú karaktert helyettesíthet nullától (0) kezdődően.
A fenti állítás teljes megértéséhez nézzünk egy gyakorlati példát. Tegyük fel, hogy meg akarjuk kapni az összes olyan filmet, amelynek címében szerepel a „kód” szó. A „kód” szó mindkét oldalán található százalékos helyettesítő karaktert használnánk a cím bármely részének mintaillesztéséhez.
SELECT * FROM movies WHERE title LIKE '%code%';
A fenti szkript végrehajtása MySQL Workbench a myflixdb adatbázissal szemben az alábbi eredményeket adja.
| film_id | cím | rendező | év_megjelent | kategória_azonosítója |
|---|---|---|---|---|
| 4 | Code Név Fekete | Edgar Jimz | 2010 | NULL |
| 7 | davinci Code | NULL | NULL | 6 |
Figyeljük meg, hogy a „kód” keresési kulcsszó akkor is visszaadódik, ha a cím elején vagy végén szerepel. Ez azért van, mert a minta tetszőleges számú karaktert engedélyez a „kód” előtt és után.
Módosítsuk most a szkriptet úgy, hogy a százalékos helyettesítő karakter csak a keresési feltételek elején jelenjen meg.
SELECT * FROM movies WHERE title LIKE '%code';
A fenti szkript végrehajtása MySQL A Workbench és a myflixdb adatbázis összehasonlítása az alábbi eredményeket adja.
| film_id | cím | rendező | év_megjelent | kategória_azonosítója |
|---|---|---|---|---|
| 7 | davinci Code | NULL | NULL | 6 |
Figyeljük meg, hogy csak egy rekord került visszaadásra. A minta tetszőleges számú karakterre illeszkedik a cím elején, de megköveteli, hogy a cím... végén „kóddal”.
Most helyezzük át a százalékos helyettesítő karaktert a minta végére. A módosított szkript az alábbiakban látható.
SELECT * FROM movies WHERE title LIKE 'code%';
A fenti szkript végrehajtása MySQL A Workbench és a myflixdb adatbázis összehasonlítása az alábbi eredményeket adja.
| film_id | cím | rendező | év_megjelent | kategória_azonosítója |
|---|---|---|---|---|
| 4 | Code Név Fekete | Edgar Jimz | 2010 | NULL |
Csak egy rekordot ad vissza a rendszer, mivel ez a minta minden olyan címhez illeszkedik, amely kezdődik a „kód” szót tetszőleges számú karakter követi. A % jel helye tehát meghatározza a keresés jelentését.
💡 Tipp: Egy olyan minta, mint a „code%”, továbbra is használhat indexet a cím oszlopban, míg a „%code%” nem. Egy vezető százalékos helyettesítő karakter kikényszeríti a MySQL minden sor beolvasásához, ezért tartsa a helyettesítő karaktert jobb oldalon, amikor a keresés lehetővé teszi.
_ – Az aláhúzásjel helyettesítő karaktere
Az aláhúzás helyettesítő karaktert használják pontosan egy karakternek felel megTegyük fel, hogy meg akarjuk találni az összes, a 200x évben megjelent filmet, ahol x pontosan egy karakter, amely bármilyen érték lehet. Az alábbi szkript kiválasztja a „200x” évben megjelent összes filmet.
SELECT * FROM movies WHERE year_released LIKE '200_';
A fenti szkript végrehajtása MySQL A Workbench és a myflixdb adatbázis összehasonlítása az alábbi eredményeket adja.
| film_id | cím | rendező | év_megjelent | kategória_azonosítója |
|---|---|---|---|---|
| 2 | Sarah Marshal elfelejtése | Nicholas stoller | 2008 | 2 |
| 9 | Honey moonERS | Jhon Shultz | 2005 | 8 |
Figyeljük meg, hogy csak azok a filmek kerülnek visszaadásra, amelyek megjelenési_év értéke 200, majd ezt egyetlen karakter követi. A százalékos helyettesítő karakterrel ellentétben az aláhúzásjel egyetlen karakternek fenntart helyet, és nem többnek.
NEM MINT a helyettesítő karakterekkel
A NOT logikai operátor helyettesítő karakterekkel együtt használható a nem megfelelő sorok visszaadására. nem egyezik a megadott mintával.
Tegyük fel, hogy a 200x évben nem bemutatott filmeket keressük. A NOT logikai operátort az alább látható módon kombináljuk az aláhúzásjel helyettesítő karakterével.
SELECT * FROM movies WHERE year_released NOT LIKE '200_';
| film_id | cím | rendező | év_megjelent | kategória_azonosítója |
|---|---|---|---|---|
| 1 | A Karib-tenger kalózai 4 | Rob Marshall | 2011 | 1 |
| 4 | Code Név Fekete | Edgar Jimz | 2010 | NULL |
| 8 | Alvilág-Awakennyomtatás | Michael Eal | 2012 | 6 |
Csak azok a filmek kerülnek visszaadásra, amelyek nem követik a 200x mintát, mivel a NOT invertálja a helyettesítő karakteres összehasonlítás eredményét. Vegye figyelembe, hogy a karaktert tartalmazó sorok NULL A LIKE vagy NOT LIKE soha nem ad vissza értékeket, mivel a NULL ismeretlen, nem pedig egyenlőtlen.
SZÖKÉS kulcsszó
Az ESCAPE kulcsszót használják escape mintaillesztő karakterek például a százalékos arány (%) és az aláhúzásjel (_), ha azok az adat részét képezik.
Tegyük fel, hogy a „67%” literális karakterláncot szeretnénk keresni. Deklarálunk egy escape karaktert, és közvetlenül az adatként beolvasandó karakter elé helyezzük.
LIKE '67#%%' ESCAPE '#';
Ha meg akarjuk találni a „67%-ban bűnös” című filmet, használhatjuk az alábbi forgatókönyvet.
SELECT * FROM movies WHERE title LIKE '67#%%' ESCAPE '#';
Figyeljük meg a dupla „%%” karaktert a LIKE záradékban. Az elsőt az escape karakter (#) előzi meg, ezért a keresett karakterlánc részének tekintjük. A második megtartja a helyettesítő karakter jelentését, és tetszőleges számú utána következő karakterre illeszkedik.
Bármely karakter szolgálhat escape karakterként, így ugyanaz a lekérdezés egyenlőségjellel is működik.
SELECT * FROM movies WHERE title LIKE '67=%%' ESCAPE '=';
A helyettesítő karakterek nagyon jól lefedik az egyszerű mintákat, de egyes keresésekhez kifejezőbb szabályokra van szükség. Az alábbi összehasonlítás mutatja, hol húzódnak a határok.
MySQL Helyettesítő karakterek vs. rendszeres kifejezés: melyiket érdemes használni?
MySQL csak két helyettesítő karaktert támogat. Az olyan karakterlisták, mint az [ac], amelyeket néhány más adatbázismotor elfogad a LIKE-on belül, nem támogatottak. Ha a keresés karaktertartományokat, váltakozást vagy lehorgonyzást igényel, a REGEXP operátor a helyes választás.
| Kritérium | LIKE helyettesítő karakterekkel | REGULÁRIS KIFEJEZÉS |
|---|---|---|
| Minta ereje | Csak két szimbólum: % és _ | Karakterosztályok, tartományok, alternálás, ismétlés |
| Tipikus felhasználás | Előtag, utótag vagy „tartalmaz” keresések | Validáció, komplex illesztés, több alternatíva |
| Indexhasználat | Lehetséges, ha a minta nem % karakterrel kezdődik | Soha nem használ indexet |
| olvashatóság | Egyszerű kezdőknek | Meredekebb tanulási görbe |
Általános szabály, hogy először a LIKE operátort használd: ez könnyebben olvasható, és a kettő közül csak ez profitálhat az indexből. Lépj át a REGEXP-re, ha egyetlen mintának több alternatívát kell kifejeznie, például minden számjeggyel kezdődő cím egyezését. Mindkét operátor csak olvasható összehasonlítás, így egyik sem változtatja meg a visszaadott sorokat. INSERT or UPDATE utasításokban; csak azt szűrik, amit a WHERE záradék kiválaszt.
