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.

  • 🔍 Definiția de bază: Wildcard-urile sunt caractere substituente pe care LIKE și NOT LIKE le folosesc pentru a potrivi modele de text în loc de valori exacte.
  • 📊 Wildcard procentual: Simbolul % se potrivește cu zero sau mai multe caractere, deci „%code%” returnează fiecare titlu de film care conține cuvântul cod.
  • 🔡 Wildcard pentru subliniere: Simbolul _ se potrivește cu exact un caracter, deci „200_” returnează titlurile lansate între 2000 și 2009.
  • 🚫 Regula negației: NOT LIKE inversează comparația și returnează fiecare rând care nu îndeplinește modelul specificat.
  • 🛡️ Manipularea evadării: Cuvântul cheie ESCAPE marchează un % sau un _ literal în interiorul șirului de căutare, astfel încât acesta să fie tratat ca date.
  • Informații despre performanță: Un caracter % inițial blochează utilizarea indexului și forțează o scanare completă a tabelului, așadar ancorează modelele în stânga ori de câte ori este posibil.
  • 🧩 Alegerea metodei: LIKE acoperă potrivirea simplă a prefixelor și sufixelor, în timp ce REGEXP se ocupă de clasele de caractere și alternanț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.

Întrebări frecvente

Nu, nu în mod implicit. LIKE urmează aranjarea coloanei și standardul MySQL Aranjamentele nu țin cont de majuscule/minuscule, așa că „code%” se potrivește și cu „Code„. Adăugați cuvântul cheie BINARY înaintea coloanei atunci când este necesară o potrivire care ține cont de majuscule/minuscule.”

Da. MySQL convertește valoarea într-un șir de caractere înainte de a o compara, motiv pentru care funcționează year_release LIKE '200_'. Conversia previne utilizarea indexului pe acea coloană, așadar filtrați cu intervale precum BETWEEN 2000 AND 2009 pe tabele mari.

Nu. Lista de caractere între paranteze acceptată de alte motoare nu este validă în interiorul unui MySQL Modelul LIKE. Folosește Operatorul REGEXP în schimb, de exemplu title REGEXP '^[ac]', pentru a se potrivi cu un interval de caractere inițiale.

Da. Asistenții AI traduc cererile în limbaj simplu în modele LIKE pe care le puteți rula într-un client, cum ar fi MySQL Banc de lucruRevizuiți întotdeauna modelul generat, deoarece mutarea unui singur simbol % modifică rândurile returnate.

Consultanții de interogări bazați pe inteligență artificială citesc ieșirea EXPLAIN și semnalează modelele cu wildcard-uri inițiale care sar peste indexuri. Apoi propun alternative, cum ar fi căutarea full-text, un model de prefix sau regexp, pe care trebuie să le validați în raport cu propriile volume de date.

Rezumați această postare cu: