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

Cosa fanno gli operatori LIKE e NOT LIKE?

Gli operatori SQL LIKE e NOT LIKE vengono utilizzati per trovare le corrispondenze tra una stringa e un determinato modello. Fanno parte dell'SQL standard e funzionano con tutti i tipi di database, il che li rende una conoscenza essenziale per tutti gli utenti di SQL. La comprensione di questi operatori vi permetterà di scrivere query migliori e di dimostrare ai potenziali datori di lavoro che avete le competenze necessarie per filtrare insiemi di dati molto ampi.

L'operatore SQL LIKE è un operatore logico che verifica se una stringa contiene o meno uno schema specifico. Un semplice esempio è quello in cui si cerca di capire se una colonna nome contiene un nome di quattro lettere che inizia con J (ad esempio "John"). L'operatore LIKE viene spesso utilizzato nella clausola WHERE delle istruzioni SELECT, DELETE e UPDATE per filtrare i dati in base a modelli. L'utilizzo dell'operatore LIKE vi consentirà di analizzare con facilità database di grandi dimensioni e di recuperare esattamente i dati di cui avete bisogno. Questo articolo fornisce una solida base dell'operatore LIKE. Se volete migliorare ulteriormente le vostre competenze in quest'area, prendete in considerazione la possibilità di iscrivervi a questo percorso di apprendimento completo di LearnSQL.it, dove farete pratica di SQL JOINs, di aggregazioni con GROUP BY e di argomenti più avanzati.

Vediamo come utilizzare l'operatore LIKE per filtrare i dati restituiti, recuperando così solo i record desiderati. Ecco la sintassi dell'operatore LIKE:

SELECT column_1, column_2, ... column_n
FROM table_name
WHERE column_1 LIKE pattern

Applichiamo questa sintassi a un esempio pratico. Immaginiamo di avere una tabella chiamata person_info contenente informazioni su nome, cognome ed età delle persone.

FirstNameLastNameAge
TimSamuels46
JohnPeterson23
TomWaters42
SarahHenderson48
PaulJohnson34
AndrewWade39
SarahSmith30
LynnPeterson27

Utilizziamo l'operatore LIKE per estrarre le informazioni relative alle persone con il cognome "Peterson".

SELECT FirstName, LastName, Age
FROM person_info
WHERE LastName LIKE 'Peterson'

L'esecuzione di questa query SQL produrrà il seguente insieme di risultati:

FirstNameLastNameAge
JohnPeterson23
LynnPeterson27

Questo è un semplice caso d'uso dell'operatore LIKE. Per casi semplici come questo, avremmo potuto scrivere anche:

SELECT FirstName, LastName, Age
FROM person_info
WHERE LastName = 'Peterson'

Qual è la differenza tra l'uso di LIKE e quello di equals? Equals (=) è un operatore di confronto che opera su numeri e stringhe. Quando si confrontano le stringhe, l'operatore equals confronta le stringhe intere. In confronto, LIKE confronta carattere per carattere attraverso l'uso di caratteri jolly, che verranno discussi in dettaglio in questo articolo.

L'SQL LIKE e i caratteri jolly

Oltre a esaminare l'uso dei caratteri SQL LIKE e NOT LIKE, esamineremo due caratteri jolly: percentuale (%) e underscore (_). I caratteri jolly vengono utilizzati per sostituire uno o più caratteri in una stringa di pattern:

  • Il carattere jolly percent (%) sostituisce uno o più caratteri in una stringa.
  • Il carattere jolly underscore (_) sostituisce esattamente un carattere in una stringa.

Il carattere jolly Underscore (_)

Vediamo prima il carattere jolly underscore (_) e applichiamolo alla nostra tabella. person_info tabella.

Immaginiamo di voler recuperare, dalla tabella person_infoi nomi delle persone con le seguenti condizioni:

  • FirstName deve iniziare con la lettera "T",
  • La terza lettera di FirstName deve essere "m", e
  • La seconda lettera di FirstName può essere qualsiasi cosa.

Possiamo utilizzare la seguente query:

SELECT FirstName
FROM person_info
WHERE FirstName LIKE 'T_m'

Il risultato di questa query è:

SELECT FirstName
FROM person_info
WHERE FirstName LIKE 'T_m'

Il risultato di questa query è:

FirstName
Tim
Tom

Notate come la seconda lettera del nome possa essere qualsiasi cosa. La nostra query SQL ignora questa lettera e cerca lo schema che abbiamo specificato.

Vediamo un altro esempio. Questa volta sostituiremo due caratteri con due caratteri jolly di sottolineatura (_).

SELECT FirstName, LastName
FROM person_info
WHERE LastName LIKE 'Wa__'

L'esecuzione di questa query recupera un singolo record dalla nostra tabella.

FirstNameLastName
AndrewWade

Si noti che Andrew Wade corrisponde allo schema, ma non Tom Waters. Inserendo due trattini bassi dopo "Wa", specifichiamo esplicitamente che il carattere LastName che stiamo cercando è lungo 4 caratteri.

Il carattere jolly del trattino basso può essere inserito in qualsiasi punto dello schema che si sta cercando. "_om", "T_m" o "To_" sono tutti modelli validi.

Il carattere jolly percentuale (%)

Vediamo ora in dettaglio il carattere jolly percent (%) e applichiamolo alla nostra tabella person_info.

Il carattere jolly percent (%) viene usato per sostituire più caratteri. Ad esempio, immaginiamo di voler trovare tutte le persone il cui cognome finisce in "figlio". Per farlo, è sufficiente scrivere la seguente query:

SELECT FirstName, LastName
FROM person_info
WHERE LastName LIKE '%son'

Il risultato di questa query è:

FirstNameLastName
JohnPeterson
SarahHenderson
PaulJohnson
LynnPeterson

Si noti che il numero di caratteri prima di "figlio" non ha importanza con questo carattere jolly.

Se il modello che si sta cercando è incorporato nel mezzo di un'altra stringa, è possibile utilizzare il carattere jolly percentuale all'inizio e alla fine del modello. Ad esempio, per trovare tutti i dipendenti il cui cognome contiene "er", utilizzare la seguente query con il pattern '%er%'.

SELECT FirstName, LastName
FROM person_info
WHERE LastName LIKE '%er%'

L'esecuzione di questa query produce il seguente insieme di risultati:

FirstNameLastName
JohnPeterson
TomWaters
SarahHenderson
LynnPeterson

Combiniamo l'uso di _ e %. Supponiamo di voler trovare tutti i nomi il cui secondo carattere è la lettera "a". Possiamo farlo con la seguente query:

SELECT FirstName, LastName
FROM person_info
WHERE FirstName LIKE '_a%'

Eseguendo questa query si ottiene questo insieme:

FirstNameLastName
SarahHenderson
PaulJohnson
PaulaSmith

L'operatore LIKE è più comunemente usato insieme alla clausola WHERE. Tuttavia, può essere utilizzato ovunque si usi un'espressione in SQL.

SQL NOT LIKE

L'operatore SQL NOT LIKE si comporta come ci si potrebbe aspettare, restituendo essenzialmente l'opposto di quello che farebbe l'operatore LIKE. Sostituiamo LIKE con NOT LIKE in uno degli esempi precedenti e vediamo l'effetto.

SELECT FirstName, LastName, Age
FROM person_info
WHERE LastName NOT LIKE 'Peterson'

Ecco l'insieme dei risultati:

FirstNameLastNameAge
TimSamuels46
TomWaters42
SarahHenderson48
PaulJohnson34
AndrewWade39
PaulaSmith30

Come si può notare, l'uso di NOT LIKE annulla lo schema specificato. Questo è simile ad altri operatori NOT che si vedono in SQL. In questo caso, l'operatore NOT LIKE recupera i dati di tutte le persone il cui cognome non è Peterson.

SQL LIKE sensibilità alle maiuscole e alle minuscole

Negli esempi precedenti, il nome "Peterson" è stato utilizzato con la lettera maiuscola. A seconda della variante di SQL utilizzata, l'operatore LIKE può essere sensibile alle maiuscole. MySQL, PostgreSQL e Oracle sono tutti sensibili alle maiuscole per impostazione predefinita.

SQL Server può essere un po' più complicato. Per impostazione predefinita, SQL Server non è sensibile alle maiuscole e alle minuscole. Tuttavia, è possibile creare un database SQL Server sensibile alle maiuscole e persino rendere sensibili le colonne di tabelle specifiche.

LIKE e NOT LIKE diversi da quelli in una clausola WHERE

È comune vedere LIKE e NOT LIKE utilizzati in combinazione con una clausola WHERE. Tuttavia, l'operatore LIKE può essere utilizzato in qualsiasi istruzione SQL valida, come SELECT, INSERT INTO, UPDATE, o DELETE. Vediamo un esempio eseguito sulla nostra tabella person_info tabella. Consideriamo la seguente query SQL:

SELECT FirstName, FirstName LIKE 'T%' AS starts_with_t
FROM person_info;

L'istruzione SELECT non si limita a recuperare i dati dalla colonna FirstName. Abbinata a LIKE, la seconda colonna selezionata in questa query restituisce un valore booleano basato su FirstName per ogni record della tabella. Lo schema specificato è qualsiasi stringa che inizia con la lettera "T", quindi questa query controlla ogni FirstName per vedere se inizia con la lettera "T" e restituisce true (1) in caso affermativo, false (0) in caso contrario.

L'esecuzione di questa query genera il seguente set di risultati:

FirstNamestarts_with_t
Tim1
John0
Tom1
Sarah0
Paul0
Andrew0
Paula0
Lynn0

SQL LIKE e NOT LIKE sono essenziali per il filtraggio dei dati

Abbiamo affrontato la maggior parte delle situazioni di utilizzo dell'operatore LIKE. La comprensione dell'operatore SQL LIKE è essenziale e, se vi candidate per un lavoro in cui è richiesto l'uso di SQL, questa potrebbe essere una delle domande del colloquio SQL. La padronanza dell'operatore LIKE e di questi due caratteri jolly si ottiene con la pratica, quindi questo corso SQL interattivo di LearnSQL.it con 88 esercizi distinti è un'ottima risorsa per chi vuole migliorare le proprie conoscenze in quest'area.