Torna all'elenco degli articoli Articoli
Tempo di lettura: 10 minuti

Come usare il LIKE in SQL: Corrispondenza dei modelli SQL

La corrispondenza dei modelli in SQL è un'abilità molto importante e utile. In questo articolo vedremo come eseguirla utilizzando LIKE in SQL.

Lacorrispondenza dei modelli SQL è un concetto molto semplice. Permette di cercare stringhe e sottostringhe e di trovare determinati caratteri o gruppi di caratteri. Oltre che in SQL, questa operazione può essere eseguita in molti altri linguaggi di programmazione.

In questo articolo esamineremo come utilizzare LIKE in SQL per la ricerca di sottostringhe. Faremo inoltre una distinzione tra SQL exact match e SQL partial match, spiegando come è possibile espandere la ricerca utilizzando i caratteri jolly. Infine, chiariremo quando è necessario utilizzare qualcosa di diverso da LIKE per trovare una corrispondenza.

Se volete esercitarvi con LIKE e altre funzioni di SQL, date un'occhiata alla nostra traccia SQL Practice Il nostro percorso. Offre oltre 600 esercizi interattivi di SQL per aiutarvi a rivedere le vostre conoscenze di SQL e ad acquisire fiducia nelle vostre capacità di SQL.

Come usare LIKE in SQL?

Supponiamo di dover recuperare alcuni record in base al fatto che una colonna contenga o meno un certo gruppo di caratteri. Come sapete, in SQL la clausola WHERE filtra i risultati SELECT. Da sola, WHERE trova le corrispondenze esatte. Ma cosa succede se si ha bisogno di trovare qualcosa utilizzando una corrispondenza parziale?

In questo caso, è possibile utilizzare LIKE in SQL. Questo operatore cerca stringhe o sottostringhe per caratteri specifici e restituisce tutti i record che corrispondono allo schema. (Di seguito è riportata la sintassi dell'operatore LIKE in un'istruzione SELECT :

SELECT   [ column_list |  *  ]   
FROM  table_name
WHERE  column or expression  LIKE  pattern;

Notate che il nome della colonna o l'espressione da cercare viene prima di LIKE in SQL. Dopo l'operatore c'è il modello da abbinare. Questo schema può essere un testo puro o un testo misto a uno o più caratteri jolly. L'uso dei caratteri jolly verrà spiegato in seguito.

Corrispondenza parziale SQL: Uso di LIKE con i caratteri jolly

Se non si conosce il modello esatto che si sta cercando, si possono usare i caratteri jolly per trovarlo. I caratteri jolly sono simboli di testo che indicano il numero di caratteri da inserire in un determinato punto della stringa. Lo standard SQL ANSI utilizza due caratteri jolly, il percento (%) e il trattino basso (_), che vengono utilizzati in modi diversi. Quando si utilizzano i caratteri jolly, si esegue una corrispondenza parziale SQL invece di una corrispondenza esatta SQL, poiché non si include una stringa esatta nella query.

wildcard description
% zero, one, or many characters, including spaces
_ a single character

Guardate la tabella completa animal che verrà utilizzata nelle nostre query SQL:

id name
1 frog
2 dog
3 bear
4 fox
5 jaguar
6 puma
7 panda
8 lion
9 leopard
10 sheep
11 camel
12 monkey
13 lemur
14 rabbit
15 hedgehog
16 elephant
17 elephant.. .
18 langur
19 hog
20 gerenuk
21
22 null

Nota: ... . indica due spazi.

Corrispondenza parziale SQL: il carattere jolly percentuale

Come si può vedere nella tabella precedente, il carattere jolly percentuale può essere utilizzato quando non si è sicuri di quanti caratteri faranno parte della corrispondenza. Nell'esempio che segue, notate cosa succede quando si usa solo questo carattere jolly con LIKE in SQL:

SELECT 
  id, 
  name 
FROM animal
WHERE name LIKE '%' ;

Risultato:

id name
1 frog
2 dog
3 bear
4 fox
5 jaguar
6 puma
7 panda
8 lion
9 leopard
10 sheep
11 camel
12 monkey
13 lemur
14 rabbit
15 hedgehog
16 elephant
17 elephant.. .
18 langur
19 hog
20 gerenuk
21

Nota: .. . indica due spazi.

Questo utilizzo della corrispondenza parziale SQL restituisce tutti i nomi della tabella, anche quelli senza caratteri. animal della tabella, anche quelli senza alcun carattere nella colonna nome. Questo perché il carattere jolly percentuale indica qualsiasi carattere o nessun carattere. Anche se nella colonna name è presente un valore nullo, viene restituita una stringa vuota.

Se invece si desidera restituire solo i nomi degli animali che iniziano con un carattere "g", si deve scrivere la query usando un "g" davanti al carattere jolly percentuale:

SELECT 
  id, 
  name 
FROM animal
WHERE name LIKE 'g%' ;

Il risultato di questa operazione di corrispondenza parziale SQL è il seguente:

id name
20 gerenuk

Allo stesso modo, se si desidera selezionare i nomi di animali che terminano con un "g", si deve anteporre il carattere jolly percentuale, come mostrato in questa query SQL a corrispondenza parziale:

SELECT 
  id, 
  name 
FROM animal
WHERE name LIKE '%g';

Risultato:

id name
1 frog
2 dog
15 hedgehog
19 hog

La seguente query restituisce tutti gli animali il cui nome contiene un "g". A tale scopo, si utilizzano due caratteri jolly percentuali e un carattere "g", come mostrato di seguito.

SELECT 
  id, 
  name 
FROM animal
WHERE name LIKE '%g%';

Risultato:

id name
1 frog
2 dog
5 jaguar
15 hedgehog
18 langur
19 hog
20 gerenuk

Tutti questi animali hanno un nome che contiene una "g" all'inizio, al centro o alla fine.

Passiamo ora al carattere jolly underscore.

SQL Partial Match: il carattere jolly underscore

Il carattere jolly underscore rappresenta un singolo carattere per ogni underscore. In questa corrispondenza parziale SQL, può sostituire qualsiasi carattere, ma ogni underscore è limitato a un solo carattere. Osservate l'esempio seguente:

SELECT 
  id, 
  name 
FROM animal
WHERE name LIKE '_';

Risultato:

id name

0 righe

Questa query non ha restituito alcun record perché nella tabella non ci sono nomi di animali con un solo carattere.

L'esempio successivo mostra tutti i nomi che contengono esattamente cinque caratteri. Per rappresentarli, dobbiamo usare cinque trattini bassi:

SELECT 
  id, 
  name 
FROM animal
WHERE name LIKE '_____';

Risultato:

id name
7 panda
10 sheep
11 camel
13 lemur

Se si utilizza il carattere jolly underscore alla fine della stringa di corrispondenza parziale SQL, la query restituirà tutti i record che corrispondono al testo indicato più un altro carattere. Di seguito viene riportato un esempio:

SELECT 
  id, 
  name 
FROM animal
WHERE name LIKE 'lio_';

Risultato:

id name
8 lion

Cosa viene restituito quando la query ha un carattere jolly underscore al centro della stringa?

SELECT 
  id, 
  name 
FROM animal
WHERE name LIKE 'p_ma';

Risultato:

id name
6 puma

Si tratta di tutti gli animali il cui nome inizia con "p" e finiscono con "ma", con un solo carattere in mezzo.

SQL Partial Match: Combinazione di caratteri jolly

È anche possibile utilizzare una combinazione di caratteri jolly di sottolineatura e percentuali per la corrispondenza dei pattern SQL. Guardate il seguente esempio:

SELECT 
  id, 
  name 
FROM animal
WHERE name LIKE '%ho_';

Risultato:

id name
15 hedgehog
19 hog

Come si può vedere, questa query ha restituito nomi che combinavano "ho" con un numero qualsiasi di caratteri davanti e un solo carattere dopo.

Uso di LIKE in SQL con il testo

Ora vedremo come utilizzare LIKE in SQL con stringhe di solo testo e senza caratteri jolly. In alcune circostanze, è possibile che esistano opzioni migliori rispetto all'uso di LIKE nella corrispondenza dei pattern SQL. Ma per ora vediamo come funziona. Cominciamo con l'esaminare la tabella completa dei nomi degli animali e dei numeri identificativi, come mostrato di seguito:

id name
1 frog
2 dog
3 bear
4 fox
5 jaguar
6 puma
7 panda
8 lion
9 leopard
10 sheep
11 camel
12 monkey
13 lemur
14 rabbit
15 hedgehog
16 elephant
17 elephant. ..
18 langur
19 hog
20 gerenuk
21
22 null

Nota: . .. indica due spazi.

Si noti che il record in cui id=21 ha una stringa vuota (senza caratteri). L'ultimo record ha un valore NULL nella colonna name.

Ora, supponiamo di voler recuperare i record in cui il nome dell'animale è "elefante". È abbastanza semplice, come mostra l'esempio qui sotto:

SELECT 
  id, 
  name 
FROM animal
WHERE name LIKE 'elephant';

Risultato:

id name
16 elephant

Nella tabella ci sono effettivamente due record contenenti "elefante". Tuttavia, il secondo record ha due spazi aggiuntivi alla fine della parola, quindi non viene restituito.

Proviamo un altro schema di testo che includa questi due spazi.

SELECT 
  id, 
  name 
FROM animal
WHERE name LIKE 'elephant  ';

Risultato:

id name
17 elephant. ..

Nota: . .. indica due spazi.

Anche in questo caso, c'è un solo record: "elefante" con due spazi.

Supponiamo poi di utilizzare una stringa di testo concreta e un operatore di uguaglianza (=), come in questo caso:

SELECT 
  id, 
  name 
FROM animal
WHERE name = 'elephant '  ;

Risultato:

id name
16 elephant

Se si vuole verificare se una stringa di testo è uguale al valore di una colonna, si cerca una corrispondenza esatta SQL piuttosto che una corrispondenza parziale SQL. In questo caso, utilizzare l'operatore equals piuttosto che LIKE.

Combinazione degli operatori NOT e LIKE

È anche possibile verificare la presenza di stringhe che non corrispondono a uno schema. A tale scopo, si combinano gli operatori LIKE e NOT. Si tratta di un altro modo di eseguire la corrispondenza dei modelli SQL.

Nell'esempio seguente, vogliamo trovare tutti i nomi di animali che non hanno il carattere "a":

SELECT 
  id, 
  name 
FROM animal
WHERE name NOT LIKE '%a%';

Risultato:

id name
1 frog
2 dog
4 fox
8 lion
10 sheep
12 monkey
13 lemur
15 hedgehog
19 hog
20 gerenuk
21 camel

Uso di LIKE in SQL con altri operatori

La clausola WHERE può includere più di una condizione. Pertanto, LIKE e NOT LIKE possono essere utilizzate con altri operatori. Vediamo un altro esempio:

SELECT 
  id, 
  name 
FROM animal
WHERE name LIKE '%g'  OR name LIKE 's%'  ;

Risultato:

id name
1 frog
2 dog
10 sheep
15 hedgehog
19 hog

Ha restituito tutti i nomi di animali che iniziano con un carattere "s" o che terminano con un carattere "g".

Uso di LIKE in SQL in altre istruzioni

Finora abbiamo parlato dell'uso di LIKE in SQL solo nelle istruzioni di SELECT. Ma questo operatore può essere usato anche in altre istruzioni, come UPDATE o DELETE. Come si può vedere, la sintassi è abbastanza simile:

UPDATE table 
SET column1 = newValue
WHERE  column2  LIKE  pattern ;
DELETE  FROM  table
WHERE  column  LIKE  pattern ;

Vediamo come utilizzare LIKE per cambiare i nomi di alcuni animali. Pronti?

UPDATE  animal 
SET name='tiger'
WHERE name LIKE '%key%' ;

C'è solo un record che soddisfa la condizione di LIKE %key%: scimmia. Dopo questo aggiornamento, "tigre" sostituirà tutte le istanze di "scimmia".

Ecco il risultato dopo aver aggiornato e selezionato tutti i record della tabella. animal tabella.

SELECT * 
FROM  animal ;
id name
1 frog
2 dog
3 bear
4 fox
5 jaguar
6 puma
7 panda
8 lion
9 leopard
10 sheep
11 camel
12 tiger
13 lemur
14 rabbit
15 hedgehog
16 elephant
17 elephant.. .
18 langur
19 hog
20 gerenuk
21
22 null

Nota: . .. indica due spazi.

Successivamente, cancelleremo tutti i record in cui il nome dell'animale inizia con un carattere "t":

DELETE FROM animal
WHERE name LIKE 't%'  ;

Per saperne di più sulla corrispondenza dei modelli SQL

La corrispondenza dei modelli SQL è molto utile per la ricerca di sottostringhe di testo. LIKE e il suo parente stretto NOT LIKE rendono questa operazione molto semplice. Se siete interessati a saperne di più sulla corrispondenza dei pattern e sull'operatore LIKE, date un'occhiata al corso SQL Basics . Vi mostrerà come costruire query da zero, ma introdurrà anche abilità pratiche come la corrispondenza dei pattern.

Se avete una conoscenza di base del linguaggio SQL, potete rinfrescarla con il programma SQL Practice Set di 88 esercizi, che vanno da semplici operazioni con le istruzioni di SELECT FROM a problemi più avanzati che coinvolgono più subquery. Oppure provate la nostra SQL Practice con 5 corsi pratici di SQL e oltre 600 esercizi. Iscrivetevi subito gratuitamente!