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