Tecniche SQL per ricerche di corrispondenza parziale utilizzando l’operatore LIKE

L’operatore SQL LIKE è uno strumento potente utilizzato per ricerche flessibili di stringhe all’interno di un database. Questo operatore consente ricerche di corrispondenza parziale, facilitando il reperimento di record che corrispondono a un modello specifico. Questo articolo descrive l’uso di base dell’operatore LIKE, fornisce esempi specifici utilizzando query SQL reali ed esplora tecniche di ricerca avanzate.

Indice

Sintassi di base dell’operatore LIKE

L’operatore LIKE viene utilizzato nelle query SQL per cercare corrispondenze parziali all’interno delle stringhe. La sintassi di base è la seguente:

SELECT column_name FROM table_name WHERE column_name LIKE 'pattern';

I modelli utilizzano caratteri jolly per specificare condizioni di corrispondenza parziale. I principali caratteri jolly sono i seguenti:

Tipi di caratteri jolly

%

Corrisponde a qualsiasi sequenza di caratteri. Ad esempio, ‘A%’ corrisponde a qualsiasi stringa che inizi con ‘A’.

_

Corrisponde a qualsiasi singolo carattere. Ad esempio, ‘A_’ corrisponde a qualsiasi stringa che inizi con ‘A’ e sia seguita da un singolo carattere.

Esempi di ricerche di corrispondenza parziale

Ecco esempi specifici di ricerche di corrispondenza parziale utilizzando l’operatore LIKE. Il seguente esempio cerca tutti i record in cui il nome del dipendente contiene “Smith”.

Esempio di base di ricerca di corrispondenza parziale

SELECT * FROM Employees WHERE Name LIKE '%Smith%';

Questa query cerca tutti i record in cui il nome del dipendente contiene “Smith”. Il carattere jolly % indica che qualsiasi sequenza di caratteri può precedere o seguire “Smith”.

Esempio avanzato di ricerca di corrispondenza parziale

Ad esempio, per cercare prodotti che contengano “Pro” nel nome del prodotto, la query sarebbe:

SELECT * FROM Products WHERE ProductName LIKE '%Pro%';

Questa query cerca tutti i prodotti che contengono “Pro” nel nome del prodotto.

Studio di caso di ricerca di corrispondenza parziale

Per cercare clienti i cui indirizzi email contengono “gmail.com”:

SELECT * FROM Customers WHERE Email LIKE '%gmail.com';

Questa query cerca tutti i clienti i cui indirizzi email contengono “gmail.com”.

Ricerche di corrispondenza in avanti

Le ricerche di corrispondenza in avanti vengono utilizzate per trovare record in cui una stringa inizia con una sottostringa specifica. Questo si ottiene utilizzando l’operatore LIKE con il carattere jolly %. Di seguito è riportato un esempio specifico.

Esempio di base di ricerca di corrispondenza in avanti

Ad esempio, per cercare dipendenti i cui nomi iniziano con “John”:

SELECT * FROM Employees WHERE Name LIKE 'John%';

Questa query restituisce tutti i record in cui la colonna Name inizia con “John”. Il carattere jolly % indica che qualsiasi sequenza di caratteri può seguire “John”.

Esempio avanzato di ricerca di corrispondenza in avanti

Per cercare prodotti con codici prodotto che iniziano con “A”:

SELECT * FROM Products WHERE ProductCode LIKE 'A%';

Questa query cerca tutti i prodotti con codici prodotto che iniziano con “A”.

Studio di caso di ricerca di corrispondenza in avanti

Per cercare clienti i cui indirizzi email iniziano con “info”:

SELECT * FROM Customers WHERE Email LIKE 'info%';

Questa query cerca tutti i clienti i cui indirizzi email iniziano con “info”.

Ricerche di corrispondenza all’indietro

Le ricerche di corrispondenza all’indietro vengono utilizzate per trovare record in cui una stringa termina con una sottostringa specifica. Questo si ottiene utilizzando l’operatore LIKE con il carattere jolly %. Di seguito è riportato un esempio specifico.

Esempio di base di ricerca di corrispondenza all’indietro

Ad esempio, per cercare dipendenti i cui nomi terminano con “son”:

SELECT * FROM Employees WHERE Name LIKE '%son';

Questa query restituisce tutti i record in cui la colonna Name termina con “son”. Il carattere jolly % indica che qualsiasi sequenza di caratteri può precedere “son”.

Esempio avanzato di ricerca di corrispondenza all’indietro

Per cercare prodotti i cui nomi terminano con “Lite”:

SELECT * FROM Products WHERE ProductName LIKE '%Lite';

Questa query cerca tutti i prodotti i cui nomi terminano con “Lite”.

Studio di caso di ricerca di corrispondenza all’indietro

Per cercare clienti i cui indirizzi email terminano con “@example.com”:

SELECT * FROM Customers WHERE Email LIKE '%@example.com';

Questa query cerca tutti i clienti i cui indirizzi email terminano con “@example.com”.

Corrispondenza in qualsiasi posizione

Le ricerche di corrispondenza in qualsiasi posizione cercano record in cui una sottostringa specifica appare ovunque all’interno della stringa. Questo si ottiene combinando l’operatore LIKE con il carattere jolly %.

Esempio di base di corrispondenza in qualsiasi posizione

Ad esempio, per cercare dipendenti i cui nomi contengono “art”:

SELECT * FROM Employees WHERE Name LIKE '%art%';

Questa query restituisce tutti i record in cui la colonna Name contiene “art”. I caratteri jolly % indicano che qualsiasi sequenza di caratteri può precedere o seguire “art”.

Esempio avanzato di corrispondenza in qualsiasi posizione

Ad esempio, per cercare prodotti le cui descrizioni contengono “eco”:

SELECT * FROM Products WHERE Description LIKE '%eco%';

Questa query cerca tutti i prodotti le cui descrizioni contengono “eco”.

Studio di caso di corrispondenza in qualsiasi posizione

Per cercare clienti i cui indirizzi contengono “Street”:

SELECT * FROM Customers WHERE Address LIKE '%Street%';

Questa query cerca tutti i clienti i cui indirizzi contengono “Street”.

L’operatore LIKE e i caratteri di escape

Quando si utilizza l’operatore LIKE, se i caratteri jolly (% o _) fanno parte della stringa effettiva, è necessario utilizzare i caratteri di escape per cercarli. Questo consente di trattare caratteri specifici come obiettivi di ricerca.

Sintassi di base per i caratteri di escape

In SQL, la parola chiave ESCAPE viene utilizzata per specificare un carattere di escape. La sintassi di base è la seguente:

SELECT column_name FROM table_name WHERE column_name LIKE 'pattern' ESCAPE 'escape_character';

Esempio di utilizzo dei caratteri di escape

Ad esempio, per cercare record contenenti “50%”:

SELECT * FROM Products WHERE ProductCode LIKE '%50!%%' ESCAPE '!';

Questa query cerca la stringa “50%”. Qui, ! è specificato come carattere di escape, quindi !% significa il carattere % effettivo.

Esempio avanzato di utilizzo dei caratteri di escape

Per cercare nomi di clienti contenenti “_Smith”:

SELECT * FROM Customers WHERE Name LIKE '%!_Smith%' ESCAPE '!';

Questa query cerca la stringa “_Smith”. Qui, ! è specificato come carattere di escape, quindi !_ significa il carattere _ effettivo.

Studio di caso di utilizzo dei caratteri di escape

Per cercare record contenenti “50% di sconto” nei commenti:

SELECT * FROM Comments WHERE CommentText LIKE '%50!% off%' ESCAPE '!';

Questa query cerca la stringa “50% di sconto”. Specificando ! come carattere di escape, % viene trattato come parte della stringa.

Considerazioni sulle prestazioni

Pur essendo conveniente, l’utilizzo dell’operatore LIKE può influire sulle prestazioni nei database di grandi dimensioni. Qui discutiamo come ottimizzare le prestazioni quando si utilizza l’operatore LIKE.

Utilizzo degli indici

In genere, le ricerche che coinvolgono l’operatore LIKE non possono utilizzare efficientemente gli indici. Tuttavia, le ricerche di corrispondenza in avanti (ad es., LIKE 'pattern%') possono utilizzare gli indici. Ad esempio, cercare record in cui i nomi iniziano con “John” può migliorare le prestazioni se viene impostato un indice appropriato.

CREATE INDEX idx_name ON Employees (Name);

Ottimizzazione delle ricerche di corrispondenza parziale e all’indietro

Le ricerche di corrispondenza parziale (LIKE '%pattern%') e all’indietro (LIKE '%pattern') non possono utilizzare gli indici, portando a prestazioni inferiori. In questi casi, considerare l’uso di un motore di ricerca full-text (ad es., Elasticsearch) o la funzionalità di ricerca full-text di SQL (ad es., indici FULLTEXT in MySQL).

CREATE FULLTEXT INDEX idx_description ON Products (Description);

Utilizzo delle cache

Utilizzare le cache per le query eseguite frequentemente può ridurre il carico del database e migliorare le prestazioni. Implementare la cache a livello di applicazione o utilizzare le funzionalità di caching del sistema di database.

Esempio di ottimizzazione delle prestazioni

Ad esempio, in una tabella con una grande quantità di dati dei clienti, utilizzare un indice di ricerca full-text può migliorare la velocità di ricerca per le ricerche di corrispondenza parziale.

ALTER TABLE Customers ADD FULLTEXT(Email);
SELECT * FROM Customers WHERE MATCH(Email) AGAINST ('%gmail.com%');

Conclusione

L’operatore SQL LIKE è uno strumento potente per recuperare efficientemente dati contenenti modelli specifici da un database. Questo articolo ha spiegato la sintassi di base dell’operatore LIKE, fornito esempi specifici di ricerche di corrispondenza parziale, in avanti, all’indietro e in qualsiasi posizione, e ha trattato tecniche di ricerca avanzate utilizzando caratteri di escape. Ha inoltre discusso le considerazioni sulle prestazioni quando si utilizza l’operatore LIKE.

L’uso efficace dell’operatore LIKE può migliorare la flessibilità delle ricerche nel database. Tuttavia, nei grandi database, è cruciale ottimizzare le prestazioni attraverso l’uso appropriato degli indici, dei motori di ricerca full-text e della cache. Combinando queste tecniche, sarà possibile effettuare ricerche nel database in modo più efficiente.

Indice