In SQL, il LIKE
l'operatore consente di eseguire la corrispondenza dei modelli. Determina se una stringa di caratteri specifica corrisponde a un modello specificato.
Un modello può includere caratteri normali e caratteri jolly.
Tabella delle sorgenti
La tabella seguente viene utilizzata per gli esempi in questa pagina.
SELECT * FROM Owners;
Risultato:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | [email protected] | | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 3 | Nancy | Simpson | (489) 591-0408 | NULL | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
Esempio
Ecco un esempio per dimostrare come il LIKE
operatore lavora.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE '%.com';
Risultato:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Homer | Connery | [email protected] | | Bart | Pitt | [email protected] | | Woody | Eastwood | [email protected] | +-------------+------------+-------------------+
In questo esempio, ho usato LIKE
operatore in combinazione con il %
operatore jolly per restituire i proprietari i cui indirizzi email terminano con .com
.
LIKE
può essere utilizzato anche con altri operatori di stringa, come _
, []
e [^]
.
Il %
Operatore con caratteri jolly
Il %
l'operatore jolly corrisponde a qualsiasi stringa di zero o più caratteri. Può essere utilizzato sia come prefisso che come suffisso e può essere utilizzato anche nel mezzo di una stringa.
Tende ad essere più comunemente usato come suffisso e ha un uso limitato nel mezzo dei modelli, sebbene ci siano alcuni casi d'uso validi per usarlo nel mezzo di un modello, come i seguenti:
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE '[email protected]%.com';
Risultato:
+-------------+------------+------------------+ | FirstName | LastName | Email | |-------------+------------+------------------| | Bart | Pitt | [email protected] | +-------------+------------+------------------+
In questo caso, non conoscevamo l'indirizzo email di Bart, ma sapevamo che iniziava con [email protected]
e terminava in .com
. Pertanto, siamo stati in grado di utilizzare LIKE
insieme al %
operatore jolly per compilare il resto.
Tieni presente che questa tecnica può restituire molte righe irrilevanti, a seconda dei dati e di come costruisci la tua istruzione SQL.
Il _
Operatore con caratteri jolly
Il trattino basso (_
) l'operatore jolly corrisponde a qualsiasi singolo carattere.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE FirstName LIKE 'b_rt';
Risultato:
+-------------+------------+------------------+ | FirstName | LastName | Email | |-------------+------------+------------------| | Bart | Pitt | [email protected] | | Burt | Tyson | [email protected] | +-------------+------------+------------------+
Il []
Operatore con caratteri jolly
Le parentesi ([]
) l'operatore con caratteri jolly corrisponde a qualsiasi singolo carattere all'interno dell'intervallo o del set specificato tra parentesi.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE FirstName LIKE '[bh]%';
Risultato:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Homer | Connery | [email protected] | | Bart | Pitt | [email protected] | | Boris | Trump | NULL | | Burt | Tyson | [email protected] | +-------------+------------+-------------------+
Qui, ho combinato il carattere jolly tra parentesi con il segno di percentuale per restituire tutti i proprietari il cui nome inizia con b
o h
.
Si noti che l'operatore tra parentesi non ha un'adozione diffusa nei DBMS. È supportato in SQL Server, ma non è supportato in MySQL, Oracle, DB2 e SQLite. Controlla la documentazione del tuo DBMS per vedere se supporta questo operatore.
Il [^]
Operatore con caratteri jolly
Il carattere di accento circonflesso (^
) può essere utilizzato per negare i risultati quando si utilizza l'operatore parentesi.
Quindi, cambiamo l'esempio precedente per restituire solo quei proprietari il cui nome non inizia con b
o h
.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE FirstName LIKE '[^bh]%';
Risultato:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Nancy | Simpson | NULL | | Woody | Eastwood | [email protected] | +-------------+------------+-------------------+
Valori NULL
La percentuale (%
) il carattere jolly corrisponde a qualsiasi cosa, quasi. Una cosa che non corrisponde è NULL
.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE '%';
Risultato:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Homer | Connery | [email protected] | | Bart | Pitt | [email protected] | | Woody | Eastwood | [email protected] | | Burt | Tyson | [email protected] | +-------------+------------+-------------------+
Nella nostra tabella, ci sono due righe con NULL
nella Email
colonna, ma quelli non vengono restituiti qui.
Prestazioni
Query che contengono il LIKE
l'operatore può essere eseguito molto più lentamente di altre query e probabilmente dovresti evitare di usare LIKE
operatore a meno che tu non ne abbia davvero bisogno. Usando il %
operatore come prefisso può essere particolarmente lento.
Questo non vuol dire che non dovresti usarlo affatto. Il LIKE
operatore è parte integrante di SQL e incontrerai molti scenari in cui sarà l'unica opzione (o almeno, l'opzione migliore).