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 | example@sqldat.com | | 2 | Bart | Pitt | (231) 465-3497 | example@sqldat.com | | 3 | Nancy | Simpson | (489) 591-0408 | NULL | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | example@sqldat.com | | 6 | Burt | Tyson | (309) 565-0112 | example@sqldat.com | +-----------+-------------+------------+----------------+-------------------+
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 | example@sqldat.com | | Bart | Pitt | example@sqldat.com | | Woody | Eastwood | example@sqldat.com | +-------------+------------+-------------------+
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 'example@sqldat.com%.com'; Risultato:
+-------------+------------+------------------+ | FirstName | LastName | Email | |-------------+------------+------------------| | Bart | Pitt | example@sqldat.com | +-------------+------------+------------------+
In questo caso, non conoscevamo l'indirizzo email di Bart, ma sapevamo che iniziava con example@sqldat.com 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 | example@sqldat.com | | Burt | Tyson | example@sqldat.com | +-------------+------------+------------------+
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 | example@sqldat.com | | Bart | Pitt | example@sqldat.com | | Boris | Trump | NULL | | Burt | Tyson | example@sqldat.com | +-------------+------------+-------------------+
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 | example@sqldat.com | +-------------+------------+-------------------+
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 | example@sqldat.com | | Bart | Pitt | example@sqldat.com | | Woody | Eastwood | example@sqldat.com | | Burt | Tyson | example@sqldat.com | +-------------+------------+-------------------+
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).