MySQL Caratteri jolly: Mi piace, Non mi piace, Escape, ( % ), ( _ )
⚡ Riepilogo intelligente
MySQL I caratteri jolly rendono possibile la ricerca basata su modelli, combinando gli operatori LIKE e NOT LIKE con caratteri speciali. Questo spiega i caratteri jolly percentuale e underscore, la parola chiave ESCAPE, le query pratiche sul database myflixdb e le considerazioni sulle prestazioni.

Che cosa sono MySQL Caratteri jolly?
MySQL I caratteri jolly I caratteri jolly sono caratteri speciali che consentono di cercare dati corrispondenti a un modello complesso anziché a un valore esatto. I caratteri jolly vengono sempre utilizzati insieme all'operatore di confronto LIKE o all'operatore di confronto NOT LIKE.
MySQL Supporta due caratteri jolly, ognuno dei quali risponde a una domanda diversa sui tuoi dati.
| Wildcard | Significato | Esempio di modello | Partite |
|---|---|---|---|
| % | Zero (0) o più caratteri | '%codice%' | Code Nome Black, Davinci Code |
| _ | Esattamente un carattere | '200_' | 2005, 2008 |
Ora che i due personaggi sono stati definiti, la sezione successiva spiega perché vale la pena impararli.
Perché utilizzare i caratteri jolly in MySQL?
Se hai familiarità con SQL, potresti pensare di poter già cercare dati complessi utilizzando SELECT e la clausola WHERE. Quindi, perché usare i caratteri jolly?
Prima di rispondere a questa domanda, consideriamo un esempio. Supponiamo che il reparto marketing della videoteca Myflix abbia condotto delle promozioni nella città di Texas e desideri avere un riscontro sul numero di iscritti provenienti da Texas. È possibile utilizzare la seguente istruzione SELECT insieme alla clausola WHERE per ottenere le informazioni desiderate.
SELECT * FROM members WHERE postal_address = 'Austin, TX' OR postal_address = 'Dallas, TX' OR postal_address = 'Iola, TX' OR postal_address = 'Houston, TX';
Come puoi vedere dalla query precedente, il "Dove la clausola" diventa lungo e fragile: ogni nuova città deve essere aggiunta manualmente e un singolo indirizzo scritto in modo errato viene silenziosamente escluso. L'utilizzo dei caratteri jolly semplifica la query, perché un singolo modello copre tutte le città dello stato.
SELECT * FROM members WHERE postal_address LIKE '%TX';
In breve, i caratteri jolly consentono di integrare potenti funzionalità di ricerca in applicazioni basate sui dati con molto meno codice SQL. La sezione successiva analizza ciascun carattere jolly singolarmente.
Tipi di MySQL I caratteri jolly
% – Il carattere jolly percentuale
Il carattere percentuale (%) viene utilizzato per specificare un modello di zero (0) o più caratteri. Ha la seguente sintassi di base.
SELECT * FROM table_name WHERE fieldname LIKE 'xxx%';
QUI:
- "Istruzione SELECT" è il comando SQL SELECT standard.
- “WHERE” è la parola chiave utilizzata per applicare il filtro.
- “LIKE” è l’operatore di confronto che viene utilizzato insieme ai caratteri jolly.
- 'xxx' rappresenta un modello specificato, come un singolo carattere o più, e "%" corrisponde a un numero qualsiasi di caratteri a partire da zero (0).
Per comprendere appieno l'affermazione precedente, consideriamo un esempio pratico. Supponiamo di voler ottenere tutti i film che contengono la parola "code" nel titolo. Utilizzeremmo il carattere jolly percentuale su entrambi i lati della parola "code" per eseguire una corrispondenza di pattern in qualsiasi punto del titolo.
SELECT * FROM movies WHERE title LIKE '%code%';
Eseguendo lo script precedente in MySQL banco di lavoro Il confronto con il database myflixdb ci fornisce i risultati mostrati di seguito.
| id_film | titolo | direttore | anno_rilasciato | categoria_id |
|---|---|---|---|---|
| 4 | Code Nome Nero | Edgar Jimz | 2010 | NULL |
| 7 | Da Vinci Code | NULL | NULL | 6 |
Si noti che la parola chiave di ricerca "code" viene restituita sia che appaia all'inizio che alla fine del titolo. Questo perché il modello consente un numero qualsiasi di caratteri prima di "code" e un numero qualsiasi di caratteri dopo di esso.
Modifichiamo ora lo script in modo che il carattere jolly percentuale appaia solo all'inizio dei criteri di ricerca.
SELECT * FROM movies WHERE title LIKE '%code';
Eseguendo lo script precedente in MySQL L'analisi con Workbench sul database myflixdb fornisce i risultati mostrati di seguito.
| id_film | titolo | direttore | anno_rilasciato | categoria_id |
|---|---|---|---|---|
| 7 | Da Vinci Code | NULL | NULL | 6 |
Nota che è stato restituito un solo record. Il modello corrisponde a qualsiasi numero di caratteri all'inizio del titolo ma richiede che il titolo sia fine con “codice”.
Ora spostiamo il carattere jolly percentuale alla fine del pattern. Lo script modificato è mostrato di seguito.
SELECT * FROM movies WHERE title LIKE 'code%';
Eseguendo lo script precedente in MySQL L'analisi con Workbench sul database myflixdb fornisce i risultati mostrati di seguito.
| id_film | titolo | direttore | anno_rilasciato | categoria_id |
|---|---|---|---|---|
| 4 | Code Nome Nero | Edgar Jimz | 2010 | NULL |
Viene restituito di nuovo un solo record, perché questo modello corrisponde a ogni titolo che inizio con “codice” seguito da un numero qualsiasi di caratteri. La posizione del simbolo % determina quindi il significato della ricerca.
Suggerimento: Un modello come 'code%' può ancora utilizzare un indice sulla colonna del titolo, mentre '%code%' non può. Un carattere jolly percentuale iniziale forza MySQL per scansionare ogni riga, quindi mantieni il carattere jolly a destra ogni volta che la ricerca lo consente.
_ – Il carattere jolly underscore
Viene utilizzato il carattere jolly di sottolineatura corrisponde esattamente a un carattereSupponiamo di voler trovare tutti i film usciti nell'anno 200x, dove x è esattamente un carattere che può assumere qualsiasi valore. Lo script seguente seleziona tutti i film usciti nell'anno "200x".
SELECT * FROM movies WHERE year_released LIKE '200_';
Eseguendo lo script precedente in MySQL L'analisi con Workbench sul database myflixdb fornisce i risultati mostrati di seguito.
| id_film | titolo | direttore | anno_rilasciato | categoria_id |
|---|---|---|---|---|
| 2 | Dimenticando Sarah Marshal | Nicholas Stoller | 2008 | 2 |
| 9 | Honey moonERS | Jhon Shultz | 2005 | 8 |
Si noti che vengono restituiti solo i film il cui valore year_released è 200 seguito da un singolo carattere. A differenza del carattere jolly percentuale, il trattino basso riserva uno spazio per un solo carattere e non di più.
NON COME con i jolly
L'operatore logico NOT può essere utilizzato insieme ai caratteri jolly per restituire le righe che non non è un corrispondere al modello specificato.
Supponiamo di voler selezionare i film che non sono stati distribuiti nell'anno 200x. Combiniamo l'operatore logico NOT con il carattere jolly underscore, come mostrato di seguito.
SELECT * FROM movies WHERE year_released NOT LIKE '200_';
| id_film | titolo | direttore | anno_rilasciato | categoria_id |
|---|---|---|---|---|
| 1 | Pirati dei Caraibi 4 | Rob Marshall | 2011 | 1 |
| 4 | Code Nome Nero | Edgar Jimz | 2010 | NULL |
| 8 | Malavita-AwakenStampa | Michele Eal | 2012 | 6 |
Vengono restituiti solo i film che non seguono il modello 200x, perché NOT inverte il risultato del confronto con il carattere jolly. Nota che le righe contenenti un NULL I valori non vengono mai restituiti da LIKE o NOT LIKE, poiché NULL è sconosciuto piuttosto che disuguale.
parola chiave ESCAPE
Viene utilizzata la parola chiave ESCAPE caratteri di escape per la corrispondenza di pattern come la percentuale (%) e il trattino basso (_) quando fanno parte dei dati stessi.
Supponiamo di voler cercare la stringa letterale "67%". Dichiariamo un carattere di escape e lo posizioniamo immediatamente prima del carattere che deve essere letto come dato.
LIKE '67#%%' ESCAPE '#';
Se vogliamo trovare il film "67% Guilty", possiamo usare la sceneggiatura mostrata qui sotto.
SELECT * FROM movies WHERE title LIKE '67#%%' ESCAPE '#';
Si noti il doppio “%%” nella clausola LIKE. Il primo è preceduto dal carattere di escape (#) e viene quindi trattato come parte della stringa da cercare. Il secondo mantiene il suo significato di carattere jolly e corrisponde a qualsiasi numero di caratteri che lo seguono.
Qualsiasi carattere può fungere da carattere di escape, quindi la stessa query funziona anche con il segno di uguale.
SELECT * FROM movies WHERE title LIKE '67=%%' ESCAPE '=';
I caratteri jolly gestiscono molto bene i modelli semplici, ma alcune ricerche richiedono regole più espressive. Il confronto seguente mostra dove si trova il limite.
MySQL Caratteri jolly o espressioni regolari: quale usare?
MySQL supporta solo due caratteri jolly. Gli elenchi di caratteri come [ac], che alcuni altri motori di database accettano all'interno di LIKE, non sono supportati. Quando una ricerca necessita di intervalli di caratteri, alternanza o ancoraggio, il Operatore REGEXP è la scelta corretta.
| Criterio | MI PIACE con i caratteri jolly | REGEXP |
|---|---|---|
| potenza del modello | Solo due simboli: % e _ | Classi di personaggi, intervalli, alternanza, ripetizione |
| Utilizzo tipico | Ricerche per prefisso, suffisso o “contiene” | Validazione, corrispondenza complessa, alternative multiple |
| Utilizzo dell'indice | Possibile quando il modello non inizia con % | non utilizza mai un indice |
| leggibilità | Semplice per i principianti | Curva di apprendimento più ripida |
Di norma, scegli prima LIKE: è più facile da leggere ed è l'unico dei due che può beneficiare di un indice. Passa a REGEXP quando un singolo pattern deve esprimere diverse alternative, ad esempio la corrispondenza di ogni titolo che inizia con una cifra. Entrambi gli operatori sono confronti di sola lettura, quindi nessuno dei due modifica le righe restituite da INSERT or AGGIORNAMENTO dichiarazioni; filtrano solo ciò che la clausola WHERE seleziona.
