TOP

SQL-Lezione 5. Caratteri jolly ed espressioni regolari (LIKE)

Spesso, per filtrare i dati, dovremo campionare non in base alla corrispondenza esatta della condizione, ma in base a un valore approssimativo. Ciò avviene quando, ad esempio, cerchiamo un prodotto il cui nome corrisponda a un determinato schema (espressione regolare) o contenga determinati simboli o parole. A tale scopo, in SQL esiste un operatore LIKE, che cerca valori approssimativi. Per costruire un tale modello, vengono utilizzati metacaratteri (caratteri speciali, per la ricerca di parte del valore), vale a dire: "segno di percentuale" (%) o asterisco (*), "trattino basso" (_) o "punto interrogativo" (?) , "parentesi quadre" ([ ]).


1. Segno di percentuale del metacarattere (%) o asterisco (*)

Selezioniamo, ad esempio, dalla nostra tabella i record che riguardano solo i prodotti che contengono la parola Sci nel nome. Per fare ciò, creeremo un modello adatto:

Run SQLSELECT * 
FROM Sumproduct 
WHERE Product LIKE '*Skis*'

Come puoi vedere, il DBMS ha selezionato solo quei record in cui la colonna Prodotto conteneva prodotti contenenti la parola Sci.

In questo esempio viene utilizzato il metacarattere asterisco (*) poiché MS Access non supporta il "segno di percentuale" (%) per l'operatore LIKE.

2. Metacarattere trattino basso (_) o punto interrogativo (?)

Un carattere di sottolineatura o un punto interrogativo viene utilizzato per sostituire un singolo carattere in una parola. Sostituiamo tutte le vocali nella parola Bikes con un "punto interrogativo" (?) e vediamo il risultato:

Run SQLSELECT * 
FROM Sumproduct 
WHERE Product LIKE 'B?k?s'
Abbiamo utilizzato il metacarattere "punto interrogativo" (?) perché MS Access non supporta il "trattino basso" (_) per l'operatore LIKE.

3. Parentesi quadre di metacaratteri ([ ])

Il metacarattere parentesi quadra ([ ]) viene utilizzato per specificare contemporaneamente un set di caratteri da ricercare.

SELECT * 
FROM Sumproduct 
WHERE City LIKE '[TN]*'

Nell'esempio precedente, abbiamo selezionato i record in cui i nomi delle città iniziano con la lettera T o N nel campo City.

Il metacarattere tra parentesi quadre ([ ]) non è supportato nel dialetto MySQL.

Anche in questo caso possiamo utilizzare un altro metacarattere che fa il contrario. Aggiungiamo un punto esclamativo (!) alla nostra espressione regolare, che significherà "non uguale" (per MS Access) o un segno di potenza (^) (per altri DBMS).

SELECT * 
FROM Sumproduct 
WHERE City LIKE '[!TN]*'

Cioè, l'ultima query che abbiamo creato verrà letta come: seleziona tutte le colonne dalla tabella Sumproduct e solo quei record in cui i nomi delle città nel campo City non iniziano con le lettere T o N. Inoltre, notiamo che il l'insieme di lettere nel metacarattere "parentesi quadre" corrisponde a una sola posizione nel testo.

Possiamo ottenere un risultato simile se utilizziamo l'operatore NOT che già conosciamo, ma con un punto esclamativo (!) il record sarà più breve.