English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Operatore LIKE SQL

In questo tutorial imparerai come recuperare dati basandoti su una corrispondenza parziale.

Corrispondenza di modello

Finora hai visto condizioni che identificano stringhe esatte, come WHERE name='Lois Lane'. Ma in SQL puoi anche utilizzare l'operatore LIKE per eseguire una corrispondenza parziale o di modello.

L'operatore LIKE ti permette di specificare uno o più caratteri jolly per eseguire una corrispondenza di modello. Puoi utilizzare i seguenti due caratteri jolly:

  • Percentile (%) - Corrisponde a una quantità qualsiasi di caratteri, inclusi zero

  • Trattino basso (_ ) - Corrisponde a un singolo carattere

Ecco alcuni esempi che mostrano come utilizzare l'operatore LIKE insieme ai caratteri jolly.

DichiarazioneSignificatoValore di ritorno
WHERE nome LIKE 'Da%'

Cerca i nomi che iniziano con Da

David, Davidson
WHERE nome LIKE '%th'Cerca i nomi che iniziano conthNome alla fineElizabeth, Smith
WHERE nome LIKE '%on%'

Cerca i nomi che contengono on

Davidson, Toni
WHERE nome LIKE 'Sa_'

Cerca i nomi che iniziano con Sa e seguono al massimo un altro carattere

Sa
WHERE nome LIKE '_oy'

ricerca di nomi che terminano con 'oy' e contengono un massimo di un carattere

Joy, Roy
WHERE name LIKE '_an_'ricerca di nomi che contengonoani cui nomi, con un carattere all'inizio e alla fineDana, Hans
WHERE name LIKE '%ar_'ricerca di nomi che contengonoari cui nomi, con un numero indefinito di caratteri all'inizio, e con un massimo di un carattere alla fineRichard, Karl
WHERE name LIKE '_ar%'ricerca di nomi che contengonoari cui nomi, con un massimo di un carattere all'inizio, e con un numero indefinito di caratteri alla fineKarl, Mariya

attraverso la ricerca di alcuni record, applichiamo la dichiarazione discussa sopra alla pratica.

Consideriamo noiemployeesIn un database c'è una tabella che contiene i seguenti record:

+--------+------------------+------------+--------+---------+
|    emp_id    |    emp_name                            |    hire_date            |    salary            |    dept_id    |
+--------+------------------+------------+--------+---------+
|      1 | Ethan Hunt       | 2001-05-01 |   5000 |       4 |
|      2 | Tony Montana     | 2002-07-15 |   6500 |       1 |
|         3             | Sarah Connor             | 2005-10-18     |         8000         |                 5         |
|      4 | Rick Deckard     | 2007-01-03 |   7200 |       3 |
|      5 | Martin Blank     | 2008-06-24 |   5600 |    NULL |
|      6 | simons bistro    | 2009-04-01 |   6000 |       1 |
+--------+------------------+------------+--------+---------+

Ora, supponiamo che si voglia trovare tutti i dipendenti i cui nomi iniziano con la lettera S.

SELECT * FROM employees 
WHERE emp_name LIKE 'S%';

Dopo aver eseguito la query, otterrete l'output seguente:

+--------+------------------+------------+--------+---------+
|    emp_id    |    emp_name                            |    hire_date            |    salary            |    dept_id    |
+--------+------------------+------------+--------+---------+
|         3             | Sarah Connor             | 2005-10-18     |         8000         |                 5         |
|      6 | simons bistro    | 2009-04-01 |   6000 |       1 |
+--------+------------------+------------+--------+---------+

In MySQL, la comparazione non binaria (CHAR, VARCHAR, TEXT) è invariabilmente senza distinzione tra maiuscole e minuscole, mentre la comparazione binaria (BINARY, VARBINARY, BLOB) è sensibile alle maiuscole e minuscole.

Questo significa che, se si utilizza la ricerca WHERE name LIKE 'S%', si otterranno tutti i valori delle colonne che iniziano con S o s (come si vede, abbiamo sia 'Sarah' che 'simons'). Tuttavia, se si desidera che questa ricerca distingua tra maiuscole e minuscole, si può utilizzare l'operatore BINARY nel modo seguente:

-- Sintassi per il database MySQL 
SELECT * FROM employees 
WHERE BINARY emp_name LIKE 'S%';

Ora, questa espressione restituirà solo i dipendenti i cui nomi iniziano con la lettera maiuscola S:

+--------+------------------+------------+--------+---------+
|    emp_id    |    emp_name                            |    hire_date            |    salary            |    dept_id    |
+--------+------------------+------------+--------+---------+
|         3             | Sarah Connor             | 2005-10-18     |         8000         |                 5         |
+--------+------------------+------------+--------+---------+

Attenzione:Se desideri trattare le colonne in modo distinto tra maiuscole e minuscole, dichiarale con regole di ordinamento case-sensitive o binarie, per evitare problemi di prestazioni.

Suggerimento:Quando non si conosce la forma esatta della stringa da cercare, la corrispondenza parziale è molto utile. Puoi anche utilizzare la corrispondenza parziale per recuperare più righe di una colonna della tabella che contiene stringhe simili.