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 | 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 | +-----------+-------------+------------+----------------+-------------------+
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 | example@sqldat.com | | Bart | Pitt | example@sqldat.com | | Woody | Eastwood | example@sqldat.com | +-------------+------------+-------------------+
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 'example@sqldat.com%.com'; Resultado:
+-------------+------------+------------------+ | FirstName | LastName | Email | |-------------+------------+------------------| | Bart | Pitt | example@sqldat.com | +-------------+------------+------------------+
Nesse caso, não sabíamos o endereço de e-mail de Bart, mas sabíamos que começava com
example@sqldat.com 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 | example@sqldat.com | | Burt | Tyson | example@sqldat.com | +-------------+------------+------------------+
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 | example@sqldat.com | | Bart | Pitt | example@sqldat.com | | Boris | Trump | NULL | | Burt | Tyson | example@sqldat.com | +-------------+------------+-------------------+
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 | example@sqldat.com | +-------------+------------+-------------------+
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 | example@sqldat.com | | Bart | Pitt | example@sqldat.com | | Woody | Eastwood | example@sqldat.com | | Burt | Tyson | example@sqldat.com | +-------------+------------+-------------------+
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).