Utilizzo Caratteri Jolly per Filtrare i Dati in MySQL
In questa nuova parte della guida su MySQL, descriveremo i caratteri jolly (che sono dei caratteri speciali utilizzati per confrontare parte di un valore), il loro utilizzo e su come effettuare ricerche con i caratteri jolly utilizzando l’operatore LIKE per un filtraggio sofisticato dei dati che abbiamo recuperato in precedenza.
Utilizzo dell’operatore like
Tutti gli operatori che abbiamo affrontato finora eseguono filtri con valori a noi noti, sia se si confrontino uno o più valori, che si ricerchino valori maggiori o minori di valori noti o che si ricerchi entro un intervallo di valori, i valori utilizzati per il filtraggio sono noti.
Questo tipo di filtraggio di dati tuttavia non sempre funziona, per esempio se voglio recuperare tutti prodotti che contengono il testo “prosciutto” all’interno del nome del prodotto, come posso farlo?
Questa ricerca non è possibile con un semplice operatore di confronto; è necessaria una ricerca con i caratteri speciali, infatti utilizzando i caratteri jolly è possibile creare criteri di ricerca che possono essere applicati dati.
SQL supporta diversi tipi di carattere jolly, per utilizzare i caratteri jolly MySQL nelle clausole di ricerca è necessario utilizzare l’operatore LIKE, che chiede a MySQL di utilizzare il criterio di ricerca ad esso successivo effettuando una ricerca per caratteri jolly invece che fare un semplice confronto di uguaglianza.
Il Carattere Jolly percentuale (%)
Il carattere jolly più utilizzato è il segno percentuale (%), infatti una stringa di ricerca % significa ” trova un numero qualsiasi di occorrenze di qualsiasi carattere “.
Per esempio, per trovare tutti prodotti che iniziano con la parola pros, è possibile utilizzare la seguente espressione SELECT:
SELECT prod_id,prod_nome FROM prodotti WHERE prod_nome LIKE 'pros%';
Output
prod_id | prod_nome |
PC | prosciutto cotto |
PCR | prosciutto crudo |
Il segno % consente a MySQL di accettare qualsiasi carattere dopo la parola pros, indipendentemente dal numero di caratteri presenti.
Bisogna ricordarsi che secondo la configurazione di MySQL, le ricerche possono distinguere le maiuscole dalle minuscole in tal caso ‘pros%’ non troverebbe corrispondenza in Prosciutto cotto.
È possibile utilizzare i caratteri jolly in qualsiasi punto del criterio di ricerca, ed è anche possibile utilizzarne più di uno all’interno della stessa condizione WHERE, come nel seguente esempio:
SELECT prod_id,prod_nome FROM prodotti WHERE prod_nome LIKE '%utto%';
Output
prod_id | prod_nome |
PC | prosciutto cotto |
PCR | prosciutto crudo |
Infatti il criterio di ricerca che abbiamo selezionato ‘%utto%’ significa ” trovare qualsiasi valore contenga il testo utto al suo interno, indipendentemente dal numero di caratteri presenti il primo dopo tale testo”.
È possibile utilizzare caratteri jolly anche nel mezzo di un criterio di ricerca, anche se ciò accade di rado.
È importante notare che, oltre a cercare corrispondenza con qualsiasi carattere, % trova la corrispondenza anche con zero caratteri infatti il carattere % nel linguaggio SQL significa: zero,uno o più caratteri nella posizione specificata nel criterio di ricerca.
Nell’utilizzo dei caratteri jolly bisogna prestare attenzione a diversi aspetti, per esempio agli spazi finali che possono interferire con i caratteri jolly.
Infatti se un prodotto come abbiamo usato negli esempi precedenti come carote fosse stato salvato con uno o più spazi dopo la parola carote, la clausola WHERE prod_nome ‘%carote’ non la recupera perché ci sono presenti altri caratteri dopo la lettera finale e.
Una semplice soluzione per ovviare a questo inconveniente è di aggiungere un % finale al criterio di ricerca.
Un altro aspetto da tenere in considerazione è la presenza di valori NULL, infatti sebbene possa sembrare che carattere jolly trovi corrispondenza in qualsiasi elemento, esiste un’eccezione: NULL.
Infatti una clausola WHERE prod_nome ‘%’ non trova corrispondente di una riga con valore NULL come nome del prodotto.
Il carattere jolly underscore (_)
Un’altro utile carattere jolly è l’underscore, o segno di sottolineatura (_); che ha la stessa funzione del segno %, ma invece di trovare corrispondenza in un numero indefinito di caratteri, la trovi un solo carattere.
SELECT prod_id,prod_nome FROM prodotti WHERE prod_nome LIKE '_rosciutto crudo';
Output
prod_id | prod_nome |
PCR | prosciutto crudo |
Il criterio di ricerca utilizzato nella clausola WHERE specifica un carattere jolly seguito da un testo.
Il risultato mostrato è l’unica riga che soddisfa il criterio di ricerca, l’underscore trova corrispondenza solamente con prosciutto crudo.
A differenza del segno % che può trovare corrispondenza con zero caratteri, _ trova corrispondenza sempre e solo con un carattere.
Suggerimenti sull’utilizzo dei caratteri jolly MySQL
Come si osserva, i caratteri jolly MySQL sono estremamente potenti, ma questa potenza ha un prezzo: solitamente ricerche con i caratteri jolly MySQL hanno tempi di elaborazione molto lunghi rispetto ad agli altri tipi di ricerca descritti in precedenza; per questo vi elencherò alcuni suggerimenti da tenere presente quando si utilizzano i caratteri jolly MySQL:
- non abusarne, se esiste un altro operatore di ricerca che consente di effettuare la stessa operazione utilizzalo.
- Quando si utilizza i caratteri jolly cercare di evitare l’utilizzo all’inizio del criterio di ricerca se non è assolutamente necessario questo perché i criteri di ricerca che iniziano con caratteri jolly sono quelli con i tempi di elaborazione dei lunghi.