English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In questo tutorial imparerai come recuperare dati basandoti su una corrispondenza parziale.
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.
Dichiarazione | Significato | Valore 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 fine | Elizabeth, 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 fine | Dana, 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 fine | Richard, 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 fine | Karl, 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.