Voltar para a lista de artigos Artigos
4 minutos de leitura

Como usar um coringa SQL

O wildcard SQL nos permite filtrar dados que correspondem a certos padrões em SQL. Utilizamos curingas SQL com o operador LIKE na cláusula WHERE de uma consulta para filtrar dados. Neste artigo para iniciantes, veremos tudo o que você precisa saber sobre os curing cards SQL básicos.

Se você gosta de jogar cartas, então sabe que os wildcards podem substituir qualquer outra carta em seu baralho. Da mesma forma, os curingas SQL podem substituir um ou mais caracteres.

Para começar com nossos wildcards SQL, vamos olhar para um simples customers mesa para nossa loja de animais de estimação:

Coringas SQL com o operador LIKE

Imagine que você testemunha um cliente saindo de uma loja de animais sem pagar por seu pedido. Estas coisas acontecem - ele simplesmente esqueceu. Você sabe que o vendedor da loja de animais de estimação tem um banco de dados de clientes, e você pergunta se ele sabe o nome do cliente para que você possa extrair o endereço e fazer o acompanhamento com ele. Mas o vendedor não tem certeza sobre o nome do cliente. Ele sabe que o nome do cliente termina com duas letras, ose que era curto, cerca de apenas três letras. Talvez tenha sido algo como Tos, Los, Kos, etc. Usando o poder de um wildcard SQL, você pode lidar com uma letra ambígua em seu banco de dados. Para representar um caractere, usamos o curinga SQL underscore. Nossa consulta SELECT se parece com isto:

SELECT * FROM customers WHERE surname LIKE ‘_os’;

Nossa consulta agora retorna todos os nossos sobrenomes, e podemos pular a declaração para cada combinação de palavras:

SELECT * FROM customers WHERE surname IN (‘Kos’,’Tos’,’Los’);

Note que a lista de sobrenomes acima não é de forma alguma exaustiva porque o wildcard sublinhado substitui qualquer caractere - mesmo um que não seja uma letra!

Cuidado: Usando os wildcards SQL sem o operador LIKE

Os wildcards SQL só funcionam no operador LIKE. Se você colocar um curinga dentro de uma string comum que não seja um argumento para o operador LIKE, você verá que SQL tratará esse curinga como um caracter literal que aparece na string. Por exemplo, considere esta consulta alternativa que não utiliza o operador LIKE:

SELECT * FROM customers WHERE surname = ‘_os’;

Esta consulta pesquisaria todos os sobrenomes que literalmente equivalem a '_os', e você pode apostar que não existem tais registros em nossa tabela. Este é um erro típico de principiante, portanto, tenha cuidado ao usar os wildcards do SQL.

Inverter os filtros de coringas SQL

Para obter o inverso de um filtro SQL wildcard, como encontrar todos os clientes cujos sobrenomes não sejam Los, Tos, Kos, etc., basta aplicar uma negação, NÃO, ao operador LIKE:

SELECT * FROM customers WHERE surname NOT LIKE ‘_os’;

Usando os wildcards SQL para representar uma coleção de caracteres

O wildcard sublinhado não é o único disponível em SQL. Um curinga SQL mais comumente usado é o sinal de porcentagem (%), que é usado para representar um ou mais caracteres. Portanto, se quisermos listar todos os clientes que vivem em cidades alemãs que terminam em 'burg', escrevemos a seguinte pergunta:

SELECT * FROM customers WHERE city LIKE ‘%burg’;

Esta consulta retornará todos os registros para clientes cuja cidade de residência é como Hamburgo, Augsburg, Oldenburg, Duisburg, e outros.

Assim como nós negamos o wildcard SQL sublinhado, também podemos negar o wildcard SQL percentual. Portanto, se quisermos extrair registros para clientes cuja cidade de residência não termine em 'burg', escreveríamos:

SELECT * FROM customers WHERE city NOT LIKE ‘%burg’;

Nota: Evite usar o curinga percentual no início de uma string com o operador LIKE, se possível. Esta construção é muito cara, pois o banco de dados precisa avaliar cada combinação de cordas que corresponda a esse padrão final. O uso de % após alguns caracteres é menos caro em termos de recursos computacionais, pois o banco de dados já conhece o espaço das cadeias de caracteres que precisa avaliar.

Combinação de wildcards em declarações LIKE

É importante notar que é possível combinar os wildcards SQL. Se você gostaria de procurar todos os clientes cuja cidade de residência começa com um "W", termina em "burg", e tem pelo menos uma letra entre o "W" e o "burg", você pode escrever:

SELECT * FROM customers WHERE city NOT LIKE ‘W_%burg’;

Go Wild com os Wildcards SQL

Neste artigo, examinamos como usar os curing cards SQL para filtrar tabelas. Cobrimos aqui apenas o básico. Para saber mais sobre os curingas SQL, recomendo vivamente que você aprenda sobre expressões regulares. Mas tenha cuidado, pois há um ditado na ciência da computação: Se você tentar resolver um problema usando expressões regulares, você vai acabar com dois problemas. Expressões regulares são um tópico avançado, portanto, tenha alguma experiência antes de tentar dominá-las. Confira isto pequena lição de LearnSQL.com.br sobre wildcards para ganhar mais experiência.