Voltar para a lista de artigos Artigos
7 minutos de leitura

O que os Operadores LIKE e NOT LIKE fazem?

Os operadores SQL LIKE e NOT LIKE são usados para encontrar correspondências entre uma string e um determinado padrão. Eles são parte do SQL padrão e funcionam em todos os tipos de banco de dados, tornando-o conhecimento essencial para todos os usuários de SQL. O entendimento destes operadores permitirá que você escreva melhores consultas e demonstre aos empregadores em potencial que você tem as habilidades necessárias para filtrar através de conjuntos de dados expansivos.

O SQL LIKE é um operador lógico que verifica se uma string contém ou não um padrão especificado. Um exemplo simples disto é quando você tenta descobrir se uma coluna de nomes contém algum nome de quatro letras começando por J (tal como "John"). O operador LIKE é freqüentemente usado na cláusula WHERE de SELECT, DELETE e UPDATE para filtrar dados com base em padrões. Tornar-se proficiente no uso do operador LIKE lhe permitirá analisar grandes bancos de dados com facilidade, e recuperar exatamente os dados que você precisa. Este artigo lhe dará uma base sólida no operador LIKE. Se você gostaria de avançar ainda mais suas habilidades nesta área, considere inscrever-se nesta faixa de aprendizado abrangente e completa de LearnSQL.com.br, onde você irá praticar SQL JOINs, agregações com GROUP BY, e tópicos mais avançados.

Vamos examinar como podemos usar o operador LIKE para filtrar os dados retornados, recuperando assim apenas os registros desejados. Aqui está a sintaxe do operador LIKE:

SELECT column_1, column_2, ... column_n
FROM table_name
WHERE column_1 LIKE pattern

Vamos aplicar esta sintaxe a um exemplo prático. Imagine que temos uma tabela chamada person_info contendo informações sobre o nome, sobrenome e idade das pessoas.

FirstNameLastNameAge
TimSamuels46
JohnPeterson23
TomWaters42
SarahHenderson48
PaulJohnson34
AndrewWade39
SarahSmith30
LynnPeterson27

Vamos usar o operador LIKE para extrair as informações para pessoas com o sobrenome "Peterson".

SELECT FirstName, LastName, Age
FROM person_info
WHERE LastName LIKE 'Peterson'

A execução desta consulta SQL produziria o seguinte conjunto de resultados:

FirstNameLastNameAge
JohnPeterson23
LynnPeterson27

Este é um caso de uso simples para o operador LIKE. Para casos simples como este, também poderíamos ter escrito:

SELECT FirstName, LastName, Age
FROM person_info
WHERE LastName = 'Peterson'

Então, qual é a diferença entre usar LIKE e igualar? Equals (=) é um operador de comparação que opera em números e strings. Ao comparar cordas, o operador igual compara cordas inteiras. Em comparação, LIKE compara caráter por caráter através do uso de wildcards, que será discutido em detalhes neste artigo.

O SQL LIKE e os wildcards

Além de examinarmos o uso de SQL LIKE e NOT LIKE, analisaremos dois caracteres curinga: porcentagem (%) e sublinhado (_). Os caracteres curinga são usados para substituir um ou mais caracteres em uma cadeia padrão:

  • O curinga percentual (%) substitui um ou mais caracteres em uma cadeia de caracteres.
  • O wildcard underscore (_) substitui exatamente um caractere em uma cadeia de caracteres.

O curinga de sublinhado (_)

Vamos ver primeiro o wildcard (_) e aplicá-lo ao nosso person_info mesa.

Imagine que queremos recuperar, da mesa person_infoos primeiros nomes das pessoas com as seguintes condições:

  • O FirstName deve começar com a letra "T",
  • A terceira carta de FirstName deve ser "m", e
  • A segunda carta FirstName pode ser qualquer coisa.

Podemos utilizar a seguinte consulta:

SELECT FirstName
FROM person_info
WHERE FirstName LIKE 'T_m'

O resultado desta consulta é:

SELECT FirstName
FROM person_info
WHERE FirstName LIKE 'T_m'

O resultado desta consulta é: O resultado desta consulta é: O resultado desta consulta é:

FirstName
Tim
Tom

Observe como a segunda letra do nome pode ser qualquer coisa. Nossa consulta SQL está ignorando essa letra e procurando o padrão que especificamos.

Vejamos outro exemplo. Desta vez, vamos substituir dois caracteres por dois caracteres curinga de sublinhado (_).

SELECT FirstName, LastName
FROM person_info
WHERE LastName LIKE 'Wa__'

Executando esta consulta, recuperamos um único registro de nossa tabela.

FirstNameLastName
AndrewWade

Observe como Andrew Wade combina com o padrão, mas não Tom Waters. Ao colocar dois sublinhados após "Wa", especificamos explicitamente que o LastName que estamos procurando tem 4 caracteres.

O wildcard do sublinhado pode ser colocado em qualquer lugar do padrão que você está procurando. "_om", "T_m", ou "To_", são todos padrões válidos.

O curinga percentual (%)

Vamos agora analisar o wildcard percentual (%) em detalhes e aplicá-lo em nossa tabela de informação_pessoal.

O curinga da porcentagem (%) é usado para substituir vários caracteres. Como exemplo, imagine que queremos encontrar todas as pessoas cujo sobrenome termina em "filho". Para conseguir isso, podemos simplesmente escrever a seguinte pergunta:

SELECT FirstName, LastName
FROM person_info
WHERE LastName LIKE '%son'

O resultado desta consulta é:

FirstNameLastName
JohnPeterson
SarahHenderson
PaulJohnson
LynnPeterson

Observe como o número de caracteres antes de "filho" não importa com este curinga.

Se o padrão que você está procurando estiver embutido no meio de outra string, você pode usar o curinga percentual no início e no final do padrão. Por exemplo, para encontrar todos os funcionários cujos sobrenomes contenham "er", use a seguinte consulta com o padrão '%er%'.

SELECT FirstName, LastName
FROM person_info
WHERE LastName LIKE '%er%'

A execução desta consulta produz o seguinte conjunto de resultados:

FirstNameLastName
JohnPeterson
TomWaters
SarahHenderson
LynnPeterson

Vamos combinar o uso de ambos _ e %. Digamos que queremos encontrar todos os primeiros nomes cujo segundo caractere é a letra "a". Podemos fazer isto com a seguinte consulta:

SELECT FirstName, LastName
FROM person_info
WHERE FirstName LIKE '_a%'

A execução desta consulta resulta neste conjunto:

FirstNameLastName
SarahHenderson
PaulJohnson
PaulaSmith

O operador LIKE é mais comumente usado em conjunto com a cláusula WHERE. Entretanto, ele pode ser usado em qualquer lugar que você use uma expressão em SQL.

SQL NOT LIKE

SQL NOT LIKE comporta-se como você poderia esperar, essencialmente retornando o oposto do que o operador LIKE faria. Vamos substituir LIKE por NOT LIKE em um de nossos exemplos anteriores e ver o efeito.

SELECT FirstName, LastName, Age
FROM person_info
WHERE LastName NOT LIKE 'Peterson'

Aqui está o conjunto de resultados:

FirstNameLastNameAge
TimSamuels46
TomWaters42
SarahHenderson48
PaulJohnson34
AndrewWade39
PaulaSmith30

Como você pode ver, o uso do NOT LIKE nega o padrão que você especifica. Isto é semelhante a outros operadores NOT que você vê em SQL. Neste caso, o operador NOT LIKE recupera dados para todas as pessoas cujo sobrenome não é Peterson.

Sensibilidade ao caso SQL LIKE

Para os exemplos acima, o nome "Peterson" foi usado com uma letra maiúscula. Dependendo da variante do SQL que você estiver usando, o operador LIKE pode ser sensível a maiúsculas e minúsculas. MySQL, PostgreSQL, e Oracle são todos sensíveis a maiúsculas e minúsculas por padrão.

O SQL Server pode ser um pouco mais complicado. Por padrão, o SQL Server não faz distinção entre maiúsculas e minúsculas. Entretanto, é possível criar um banco de dados SQL Server sensível a maiúsculas e minúsculas e até mesmo tornar as colunas das tabelas específicas sensíveis a maiúsculas e minúsculas.

LIKE e NOT LIKE Outro que em uma cláusula WHERE

É comum ver LIKE e NOT LIKE usados em combinação com uma cláusula WHERE. Entretanto, o operador LIKE pode ser usado em qualquer instrução SQL válida, como SELECT, INSERT INTO, UPDATE, ou DELETE. Vejamos isto com um exemplo executado contra nossa person_info mesa. Considere a seguinte consulta SQL:

SELECT FirstName, FirstName LIKE 'T%' AS starts_with_t
FROM person_info;

A declaração SELECT aqui não recupera apenas os dados da coluna FirstName. Emparelhado com LIKE, a segunda coluna selecionada nesta consulta retorna um valor booleano baseado em FirstName para cada registro na tabela. O padrão que especificamos é qualquer string começando com a letra "T", então esta consulta verifica cada FirstName para ver se começa com a letra "T" e retorna verdadeiro (1) se começa, falso (0) caso contrário.

A execução desta consulta gera o seguinte conjunto de resultados:

FirstNamestarts_with_t
Tim1
John0
Tom1
Sarah0
Paul0
Andrew0
Paula0
Lynn0

SQL LIKE e NOT LIKE são essenciais para a filtragem de dados

Já cobrimos a maioria das situações para o uso do operador LIKE. Entender o operador SQL LIKE é essencial, e se você se candidatar a qualquer trabalho em que o uso de SQL seja necessário, pode ser uma das perguntas da entrevista SQL que eles fazem. O domínio do operador LIKE e destes dois caracteres curinga vem com prática, portanto este curso SQL interativo do LearnSQL.com.br com 88 exercícios distintos é um grande recurso para aqueles que procuram melhorar o conhecimento nesta área.