MySQL Wildcard-uri: Îmi place, NU Îmi place, Escape, ( % ), ( _ )
⚡ Rezumat inteligent
MySQL Caracterele wildcard fac posibilă căutarea bazată pe modele prin asocierea operatorilor LIKE și NOT LIKE cu caractere speciale. Aceasta explică caracterele wildcard procent și subliniere, cuvântul cheie ESCAPE, interogări practice în baza de date myflixdb și considerații privind performanța.
Care sunt MySQL Wildcards?
MySQL metacaractere sunt caractere speciale care vă ajută să căutați date care corespund unui model complex în loc de o valoare exactă. Wildcard-urile sunt întotdeauna utilizate împreună cu operatorul de comparație LIKE sau cu operatorul de comparație NOT LIKE.
MySQL acceptă două caractere wildcard, iar fiecare răspunde la o întrebare diferită despre datele dvs.
| wildcard | Sens | Exemplu de model | Meciuri |
|---|---|---|---|
| % | Zero (0) sau mai multe caractere | '%cod%' | Code Nume Black, Davinci Code |
| _ | Exact un caracter | „200_” | 2005, 2008 |
Acum, că cele două personaje sunt definite, următoarea secțiune explică de ce merită să fie învățate.
De ce să folosiți caractere wildcard în MySQL?
Dacă sunteți familiarizați cu SQL, s-ar putea să credeți că puteți deja căuta orice date complexe folosind SELECT și clauza WHERE. Așadar, de ce să folosiți wildcard-uri?
Înainte de a răspunde la această întrebare, să luăm un exemplu. Să presupunem că departamentul de marketing al bibliotecii video Myflix a desfășurat promoții în orașul Texas și dorește feedback cu privire la numărul de membri care s-au înregistrat din Texas. Puteți utiliza următoarea instrucțiune SELECT împreună cu clauza WHERE pentru a obține informațiile dorite.
SELECT * FROM members WHERE postal_address = 'Austin, TX' OR postal_address = 'Dallas, TX' OR postal_address = 'Iola, TX' OR postal_address = 'Houston, TX';
După cum puteți vedea din interogarea de mai sus, „clauza WHERE„devine lung și fragil: fiecare oraș nou trebuie adăugat manual, iar o singură adresă scrisă greșit este exclusă în mod silențios. Utilizarea wildcard-urilor simplifică interogarea, deoarece un singur model acoperă fiecare oraș din stat.
SELECT * FROM members WHERE postal_address LIKE '%TX';
Pe scurt, caracterele wildcard vă permit să integrați funcții puternice de căutare în aplicații bazate pe date cu mult mai puțin SQL. Următoarea secțiune analizează fiecare caracter wildcard pe rând.
Tipuri de MySQL metacaractere
% – wildcard-ul procentual
Caracterul procentual (%) este utilizat pentru a specifica un model de zero (0) sau mai multe caractere. Are următoarea sintaxă de bază.
SELECT * FROM table_name WHERE fieldname LIKE 'xxx%';
AICI:
- instrucțiunea SELECT„este comanda SQL SELECT standard.”
- „WHERE” este cuvântul cheie folosit pentru a aplica filtrul.
- „LIKE” este operatorul de comparație care se utilizează împreună cu wildcard-urile.
- „xxx” este orice model specificat, cum ar fi un singur caracter sau mai multe, iar „%” se potrivește cu orice număr de caractere începând de la zero (0).
Pentru a înțelege pe deplin afirmația de mai sus, să luăm un exemplu practic. Să presupunem că vrem să obținem toate filmele care au cuvântul „cod” ca parte a titlului. Am folosi caracterul wildcard procentual de pe ambele părți ale cuvântului „cod” pentru a efectua o potrivire de model oriunde în titlu.
SELECT * FROM movies WHERE title LIKE '%code%';
Executarea scriptului de mai sus în MySQL Banc de lucru împotriva bazei de date myflixdb ne dă rezultatele prezentate mai jos.
| movie_id | titlu | director | year_released | categorie_id |
|---|---|---|---|---|
| 4 | Code Nume Black | Edgar Jimz | 2010 | NULL |
| 7 | Da Vinci Code | NULL | NULL | 6 |
Observați că cuvântul cheie de căutare „cod” este returnat indiferent dacă apare la începutul sau la sfârșitul titlului. Acest lucru se datorează faptului că modelul permite orice număr de caractere înainte de „cod” și orice număr de caractere după acesta.
Să modificăm acum scriptul astfel încât wildcard-ul procentual să apară doar la începutul criteriilor de căutare.
SELECT * FROM movies WHERE title LIKE '%code';
Executarea scriptului de mai sus în MySQL Workbench-ul pentru baza de date myflixdb ne oferă rezultatele prezentate mai jos.
| movie_id | titlu | director | year_released | categorie_id |
|---|---|---|---|---|
| 7 | Da Vinci Code | NULL | NULL | 6 |
Observați că a fost returnată o singură înregistrare. Modelul se potrivește cu orice număr de caractere la începutul titlului, dar necesită ca titlul să capăt cu „cod”.
Să mutăm acum caracterul wildcard procentual la sfârșitul modelului. Scriptul modificat este prezentat mai jos.
SELECT * FROM movies WHERE title LIKE 'code%';
Executarea scriptului de mai sus în MySQL Workbench-ul pentru baza de date myflixdb ne oferă rezultatele prezentate mai jos.
| movie_id | titlu | director | year_released | categorie_id |
|---|---|---|---|---|
| 4 | Code Nume Black | Edgar Jimz | 2010 | NULL |
Se returnează din nou o singură înregistrare, deoarece acest model se potrivește cu fiecare titlu care începe cu „cod” urmat de orice număr de caractere. Prin urmare, poziția simbolului % decide sensul căutării.
💡 Sfat: Un model precum „code%” poate folosi în continuare un index pe coloana de titlu, în timp ce „%code%” nu poate. Un wildcard procentual inițial forțează MySQL pentru a scana fiecare rând, așa că păstrați wildcardul în dreapta ori de câte ori căutarea o permite.
_ – Caracterul wildcard de subliniere
Wildcardul de subliniere este folosit pentru potrivește exact un caracterSă presupunem că vrem să găsim toate filmele lansate în anii 200x, unde x este exact un caracter care poate avea orice valoare. Scriptul de mai jos selectează toate filmele lansate în anul „200x”.
SELECT * FROM movies WHERE year_released LIKE '200_';
Executarea scriptului de mai sus în MySQL Workbench-ul pentru baza de date myflixdb ne oferă rezultatele prezentate mai jos.
| movie_id | titlu | director | year_released | categorie_id |
|---|---|---|---|---|
| 2 | Uitând-o pe Sarah Marshal | Nicolae Stoller | 2008 | 2 |
| 9 | Honey mooners | Jhon Shultz | 2005 | 8 |
Rețineți că sunt returnate doar filmele a căror valoare pentru year_release este 200, urmată de un singur caracter. Spre deosebire de wildcard-ul procent, sublinierea rezervă un loc pentru un singur caracter și nu mai mult.
NU E CA și cu wildcard-urile
Operatorul logic NOT poate fi utilizat împreună cu wildcard-uri pentru a returna rândurile care fac nu corespunde modelului specificat.
Să presupunem că dorim filmele care nu au fost lansate în anii 200x. Combinăm operatorul logic NOT cu caracterul wildcard underscore, așa cum se arată mai jos.
SELECT * FROM movies WHERE year_released NOT LIKE '200_';
| movie_id | titlu | director | year_released | categorie_id |
|---|---|---|---|---|
| 1 | Piratii din Caraibe 4 | Rob Marshall | 2011 | 1 |
| 4 | Code Nume Black | Edgar Jimz | 2010 | NULL |
| 8 | Lumea interlopă-Awakenimprimare | Michael Eal | 2012 | 6 |
Sunt returnate doar filmele care nu respectă modelul 200x, deoarece NOT inversează rezultatul comparației cu wildcard-uri. Rețineți că rândurile care conțin un NULL Valorile nu sunt niciodată returnate de LIKE sau NOT LIKE, deoarece NULL este necunoscută și nu inegală.
Cuvânt cheie ESCAPE
Cuvântul cheie ESCAPE este folosit pentru caractere de potrivire a modelelor de evadare cum ar fi procentul (%) și sublinierea (_) atunci când fac parte din datele în sine.
Să presupunem că vrem să căutăm șirul literal „67%”. Declarăm un caracter escape și îl plasăm imediat înaintea caracterului care trebuie citit ca date.
LIKE '67#%%' ESCAPE '#';
Dacă vrem să găsim filmul „67% Vinovat”, putem folosi scenariul prezentat mai jos.
SELECT * FROM movies WHERE title LIKE '67#%%' ESCAPE '#';
Rețineți dublul „%%” din clauza LIKE. Primul este precedat de caracterul escape (#) și, prin urmare, este tratat ca parte a șirului căutat. Al doilea își păstrează semnificația wildcard-ului și se potrivește cu orice număr de caractere care urmează.
Orice caracter poate servi drept caracter de escape, deci aceeași interogare funcționează și cu semnul egal.
SELECT * FROM movies WHERE title LIKE '67=%%' ESCAPE '=';
Caracterele wildcard acoperă foarte bine modelele simple, dar unele căutări necesită reguli mai expresive. Comparația de mai jos arată unde se află limita.
MySQL Wildcard-uri vs. REGEXP: pe care ar trebui să îl utilizați?
MySQL acceptă doar două caractere wildcard. Listele de caractere precum [ac], pe care alte motoare de baze de date le acceptă în LIKE, nu sunt acceptate. Când o căutare necesită intervale de caractere, alternare sau ancorare, Operatorul REGEXP este alegerea corectă.
| Criteriu | LIKE cu wildcard-uri | regexp |
|---|---|---|
| Puterea modelului | Doar două simboluri: % și _ | Clase de caractere, intervale, alternanță, repetiție |
| Utilizare tipică | Căutări cu prefixe, sufixe sau „conține” | Validare, potrivire complexă, alternative multiple |
| Utilizarea indexului | Posibil când modelul nu începe cu % | Nu folosește niciodată un index |
| Diviziune | Simplu pentru începători | Curbă de învățare mai abruptă |
De regulă, alegeți mai întâi LIKE: este mai ușor de citit și este singurul dintre cele două care poate beneficia de un index. Treceți la REGEXP atunci când un singur model trebuie să exprime mai multe alternative, de exemplu, potrivirea fiecărui titlu care începe cu o cifră. Ambii operatori sunt comparații doar pentru citire, deci niciunul nu modifică rândurile returnate de INSERT or UPDATE instrucțiuni; acestea filtrează doar ceea ce selectează clauza WHERE.

