Database
 sql >> Database >  >> RDS >> Database

Operatore SQL LIKE per principianti

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).