Database
 sql >> Base de Dados >  >> RDS >> Database

Operador SQL LIKE para iniciantes


No SQL, o LIKE operador permite que você faça a correspondência de padrões. Ele determina se uma cadeia de caracteres específica corresponde a um padrão especificado.

Um padrão pode incluir caracteres regulares e caracteres curinga.

Tabela de origem


A tabela a seguir é usada para os exemplos nesta página.
SELECT * FROM Owners;

Resultado:
+-----------+-------------+------------+----------------+-------------------+
| 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]  |
+-----------+-------------+------------+----------------+-------------------+

Exemplo


Aqui está um exemplo para demonstrar como o LIKE operador funciona.
SELECT 
    FirstName,
    LastName,
    Email
FROM Owners
WHERE Email LIKE '%.com';

Resultado:
+-------------+------------+-------------------+
| FirstName   | LastName   | Email             |
|-------------+------------+-------------------|
| Homer       | Connery    | [email protected] |
| Bart        | Pitt       | [email protected]  |
| Woody       | Eastwood   | [email protected] |
+-------------+------------+-------------------+

Neste exemplo, usei o LIKE operador em conjunto com o % operador curinga para retornar proprietários cujos endereços de e-mail terminam em .com .

LIKE pode ser usado com outros operadores de string também, como _ , [] e [^] .

O % Operador curinga


O % operador curinga corresponde a qualquer cadeia de zero ou mais caracteres. Ele pode ser usado como prefixo ou sufixo, e também pode ser usado no meio de uma string.

Ele tende a ser mais comumente usado como sufixo e tem uso limitado no meio de padrões, embora existam alguns casos de uso válidos para usá-lo no meio de um padrão, como o seguinte:
SELECT 
    FirstName,
    LastName,
    Email
FROM Owners
WHERE Email LIKE '[email protected]%.com';

Resultado:
+-------------+------------+------------------+
| FirstName   | LastName   | Email            |
|-------------+------------+------------------|
| Bart        | Pitt       | [email protected] |
+-------------+------------+------------------+

Nesse caso, não sabíamos o endereço de e-mail de Bart, mas sabíamos que começava com [email protected] e terminou em .com . Portanto, pudemos usar LIKE em conjunto com o % operador curinga para preencher o resto.

Lembre-se de que essa técnica pode retornar muitas linhas irrelevantes, dependendo dos dados e de como você constrói sua instrução SQL.

O _ Operador curinga


O sublinhado (_ ) operador curinga corresponde a qualquer caractere único.
SELECT 
    FirstName,
    LastName,
    Email
FROM Owners
WHERE FirstName LIKE 'b_rt';

Resultado:
+-------------+------------+------------------+
| FirstName   | LastName   | Email            |
|-------------+------------+------------------|
| Bart        | Pitt       | [email protected] |
| Burt        | Tyson      | [email protected] |
+-------------+------------+------------------+

O [] Operador curinga


Os colchetes ([] ) o operador curinga corresponde a qualquer caractere único dentro do intervalo ou conjunto especificado entre colchetes.
SELECT 
    FirstName,
    LastName,
    Email
FROM Owners
WHERE FirstName LIKE '[bh]%';

Resultado:
+-------------+------------+-------------------+
| FirstName   | LastName   | Email             |
|-------------+------------+-------------------|
| Homer       | Connery    | [email protected] |
| Bart        | Pitt       | [email protected]  |
| Boris       | Trump      | NULL              |
| Burt        | Tyson      | [email protected]  |
+-------------+------------+-------------------+

Aqui, combinei o caractere curinga de colchetes com o sinal de porcentagem para retornar todos os proprietários cujo primeiro nome começa com b ou h .

Observe que o operador colchetes não tem ampla adoção em SGBDs. Ele é compatível com SQL Server, mas não é compatível com MySQL, Oracle, DB2 e SQLite. Verifique a documentação do seu DBMS para ver se ele suporta esse operador.

O [^] Operador curinga


O caractere acento circunflexo (^ ) pode ser usado para negar os resultados ao usar o operador de colchetes.

Portanto, alteramos o exemplo anterior para retornar apenas os proprietários cujo primeiro nome não comece com b ou h .
SELECT 
    FirstName,
    LastName,
    Email
FROM Owners
WHERE FirstName LIKE '[^bh]%';

Resultado:
+-------------+------------+-------------------+
| FirstName   | LastName   | Email             |
|-------------+------------+-------------------|
| Nancy       | Simpson    | NULL              |
| Woody       | Eastwood   | [email protected] |
+-------------+------------+-------------------+

Valores NULOS


A porcentagem (% ) curinga corresponde a qualquer coisa – quase. Uma coisa que não corresponde é NULL .
SELECT 
    FirstName,
    LastName,
    Email
FROM Owners
WHERE Email LIKE '%';

Resultado:
+-------------+------------+-------------------+
| FirstName   | LastName   | Email             |
|-------------+------------+-------------------|
| Homer       | Connery    | [email protected] |
| Bart        | Pitt       | [email protected]  |
| Woody       | Eastwood   | [email protected] |
| Burt        | Tyson      | [email protected]  |
+-------------+------------+-------------------+

Em nossa tabela, existem duas linhas com NULL no Email coluna, mas esses não são retornados aqui.

Desempenho


Consultas que contêm o LIKE pode ser executado muito mais lentamente do que outras consultas, e você provavelmente deve evitar usar o LIKE operador, a menos que você realmente precise dele. Usando o % operador como um prefixo pode ser particularmente lento.

Isso não quer dizer que você não deve usá-lo em tudo. O LIKE O operador é parte integrante do SQL e você encontrará muitos cenários em que será a única opção (ou pelo menos a melhor opção).