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.

  • 🔍 Alapvető definíció: A helyettesítő karakterek olyan helyőrző karakterek, amelyeket a LIKE és a NOT LIKE függvények szöveges minták egyeztetésére használnak pontos értékek helyett.
  • 📊 Százalékos helyettesítő karakter: A % szimbólum nulla vagy több karakterre illeszkedik, így a '%code%' minden olyan filmcímet visszaad, amely tartalmazza a kód szót.
  • 🔡 Aláhúzás Helyettesítő karakter: A _ szimbólum pontosan egy karaktert egyezik, tehát a '200_' a 2000 és 2009 között megjelent címeket adja vissza.
  • ???? Tagadási szabály: A NOT LIKE függvény megfordítja az összehasonlítást, és minden olyan sort visszaad, amely nem felel meg a megadott mintának.
  • 🛡️ Meneküléskezelés: Az ESCAPE kulcsszó egy literál % vagy _ jelet jelöl a keresési karakterláncban, így azt adatként kezeli a rendszer.
  • Teljesítményinformációk: A vezető % karakter blokkolja az index használatát, és teljes táblaátvizsgálást kényszerít ki, ezért lehetőség szerint bal oldalon horgonyozzanak mintákat.
  • 🧩 Módszer kiválasztása: A LIKE az egyszerű előtag- és utótag-egyeztetést fedi le, míg a REGEXP a karakterosztályokat és az alternálást kezeli.

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.

GYIK

Nem, alapértelmezés szerint nem. A LIKE az oszlop rendezését követi, és a standard MySQL A rendezések nem megkülönböztetik a kis- és nagybetűket, így a 'code%' is egyezik a következővel: „Code„. Adja hozzá a BINARY kulcsszót az oszlop elé, ha kis- és nagybetűérzékeny egyezésre van szükség.

Igen. MySQL A year_released függvény az összehasonlítás előtt karakterlánccá alakítja az értéket, ezért működik a LIKE '200_' függvény. Az átalakítás megakadályozza az index használatát az adott oszlopon, ezért nagy táblázatokban olyan tartományokkal szűrjünk, mint a BETWEEN 2000 AND 2009.

Nem. A néhány más motor által elfogadott zárójeles karakterlista nem érvényes egy MySQL HASONLÓ minta. Használd a REGEXP operátor ehelyett például a title REGEXP '^[ac]' kifejezést használja a kezdő karakterek tartományának egyeztetéséhez.

Igen. A mesterséges intelligencia asszisztensei egyszerű nyelvű kéréseket fordítanak LIKE mintákká, amelyeket egy kliensben futtathatsz, például MySQL WorkbenchMindig tekintse át a létrehozott mintát, mert egyetlen % szimbólum mozgatása megváltoztatja, hogy mely sorok kerülnek visszaadásra.

Az AI lekérdezési tanácsadók beolvassák az EXPLAIN kimenetet, és megjelölik az indexeket kihagyó kezdő helyettesítő karaktereket tartalmazó mintákat. Ezután alternatívákat javasolnak, például teljes szöveges keresést, előtagmintát vagy REGULÁRIS KIFEJEZÉS, amelyet továbbra is ellenőrizned kell a saját adatmennyiségeiddel szemben.

Foglald össze ezt a bejegyzést a következőképpen: