Aula 09: Filtros Avançados DML

SENAI | Técnico em Desenvolvimento de Sistemas

Exemplo de Referência Completo

Dominando Buscas Complexas no PostgreSQL & Supabase

Aprenda a ir além do simples operador igual (=). Entenda como aplicar buscas imprecisas, listas de opções, intervalos numéricos/temporais e detecção de campos ausentes no banco de dados.

Cenário de Exemplo: Tabela clientes

Base usada nos 5 passos de demonstração técnica abaixo.

id nome email estado created_at telefone
1 Ana Silva ana.silva@gmail.com SP 2026-02-10 (11) 98765-4321
2 Carlos Souza CARLOS@outlook.com RJ 2026-05-15 [NULL]
3 Mariana Costa mari.costa@GMAIL.COM MG 2026-08-20 (31) 99123-8899
4 Lucas Pereira lucas.p@tech.com BA 2025-11-01 (71) 98822-1100
Passo 01 Padrões de Texto

1. Buscas com ILIKE (Case-Insensitive)

Encontra fragmentos de texto sem se preocupar com maiúsculas ou minúsculas.

SELECT * FROM clientes
WHERE email ILIKE '%@gmail.com';
Por que usar? Retorna e-mails como ana@gmail.com ou mari@GMAIL.COM de forma transparente.
Passo 02 Lista de Opções

2. Seleção de Listas com IN

Elimina múltiplos comandos OR repetitivos e simplifica a query.

SELECT * FROM clientes
WHERE estado IN ('SP', 'RJ', 'MG');
Equivalência: É idêntico a escrever estado = 'SP' OR estado = 'RJ' OR estado = 'MG', mas muito mais limpo.
Passo 03 Intervalos

3. Intervalos com BETWEEN

Filtra faixas numéricas ou datas inclusivas (início e fim incluídos).

SELECT * FROM clientes
WHERE created_at BETWEEN '2026-01-01' AND '2026-12-31';
Dica de Ouro: Ideal para relatórios anuais, mensais, trimestrais ou faixas de preço/valores.
Passo 04 Checagem de Nulos

4. Checando Vazio com IS NOT NULL

Garante que apenas registros com dados devidamente preenchidos sejam retornados.

SELECT * FROM clientes
WHERE telefone IS NOT NULL;
Regra Crucial: Nunca use = NULL. Em SQL, ausência de dado sempre se testa com IS NULL ou IS NOT NULL.
Passo 05: A Busca Completa

Consulta Mestra Combinada (Sintese)

Unindo múltiplos filtros avançados na mesma cláusula WHERE usando AND.

SELECT * FROM clientes
WHERE email ILIKE '%@gmail.com'
  AND created_at BETWEEN '2026-01-01' AND '2026-12-31'
  AND telefone IS NOT NULL;
1. ILIKE '%@gmail.com' Garante que o e-mail seja do Gmail, em qualquer combinação de caixa alta/baixa.
2. BETWEEN '2026-01-01'... Restringe os cadastros exclusivamente ao ano de 2026.
3. IS NOT NULL Exclui qualquer usuário que não tenha cadastrado o número de telefone.