SEBENTA DE SQL
Guia prático de SQL para bases de dados e análise de dados
Nível Básico a Avançado
Objetivo Aprender a consultar, filtrar, combinar e analisar dados
Foco SELECT, WHERE, JOIN, GROUP BY, CTEs, subconsultas e funções de janela
Aplicação Data Analytics, Administração, Logística, Finanças e BI
A sebenta usa SQL padrão como referência. A sintaxe de algumas funções
pode variar entre PostgreSQL, MySQL, SQL Server, Oracle e outros SGBD.
Sebenta de SQL Página 1
1. O que é SQL?
Conceito
SQL, Structured Query Language, é a linguagem utilizada para consultar e manipular dados em sistemas
de gestão de bases de dados relacionais.
O que pode fazer
Consultar dados, inserir registos, atualizar informações, eliminar registos, criar estruturas e controlar
determinados aspetos da base de dados.
SQL e SGBD
SQL é a linguagem. PostgreSQL, MySQL, SQL Server e Oracle são exemplos de sistemas de gestão de
bases de dados que implementam SQL.
2. Conceitos fundamentais
Base de dados
Conjunto organizado de dados.
Tabela
Estrutura composta por linhas e colunas.
Linha
Representa um registo.
Coluna
Representa um atributo ou campo.
Chave primária
Identifica de forma única cada registo.
Chave estrangeira
Relaciona uma tabela com outra através de uma chave.
3. SELECT
Consulta básica
SELECT * FROM clientes;
Selecionar colunas
SELECT nome, cidade FROM clientes;
Alias
SELECT nome AS cliente FROM clientes;
Boa prática
Evite SELECT * em consultas de produção quando não precisa de todas as colunas.
DICA DE OURO: Antes de escrever uma consulta complexa, formule primeiro a pergunta de negócio. Depois
determine quais tabelas, campos, filtros e agregações são necessários.
4. WHERE
Sebenta de SQL Página 2
Filtrar
SELECT * FROM clientes WHERE cidade = 'Luanda';
Números
SELECT * FROM produtos WHERE preco > 10000;
Datas
SELECT * FROM vendas WHERE data_venda >= '2026-01-01';
Operadores
=, <>, >, <, >= e <=.
5. AND, OR e NOT
AND
Exige que várias condições sejam verdadeiras.
OR
Permite que pelo menos uma das condições seja verdadeira.
NOT
Inverte uma condição.
Exemplo
SELECT * FROM produtos WHERE categoria = 'Alimentar' AND stock > 0;
6. IN e BETWEEN
IN
SELECT * FROM clientes WHERE cidade IN ('Luanda', 'Benguela', 'Huambo');
BETWEEN
SELECT * FROM produtos WHERE preco BETWEEN 10000 AND 50000;
Dica
IN é útil quando existem vários valores possíveis. BETWEEN é útil para intervalos.
7. LIKE e padrões de texto
Começa por
WHERE nome LIKE 'Paulo%'
Termina por
WHERE nome LIKE '%Gomes'
Contém
WHERE nome LIKE '%Silva%'
Cuidado
O comportamento de maiúsculas e minúsculas pode variar conforme o SGBD e a configuração.
8. ORDER BY
Sebenta de SQL Página 3
Ascendente
SELECT * FROM produtos ORDER BY preco ASC;
Descendente
SELECT * FROM produtos ORDER BY preco DESC;
Várias colunas
ORDER BY categoria ASC, preco DESC;
Aplicação
Ideal para criar rankings, por exemplo os produtos mais vendidos.
9. DISTINCT
Objetivo
Retira duplicações no conjunto de resultados.
Exemplo
SELECT DISTINCT cidade FROM clientes;
Atenção
DISTINCT elimina duplicações no resultado da consulta, não necessariamente os duplicados existentes na
tabela.
10. LIMIT e TOP
LIMIT
Em SGBD como PostgreSQL e MySQL, LIMIT pode restringir a quantidade de linhas devolvidas.
Exemplo
SELECT * FROM vendas ORDER BY valor DESC LIMIT 10;
TOP
No SQL Server, uma forma comum é SELECT TOP 10 ...
Nota
A sintaxe depende do SGBD.
11. Funções de agregação
COUNT
Conta registos ou valores.
SUM
Calcula a soma.
AVG
Calcula a média.
MIN
Encontra o menor valor.
MAX
Encontra o maior valor.
Sebenta de SQL Página 4
Exemplo
SELECT SUM(valor) AS faturamento FROM vendas;
12. GROUP BY
Objetivo
Agrupa linhas para produzir resultados resumidos por categoria.
Exemplo
SELECT produto, SUM(valor) AS faturamento FROM vendas GROUP BY produto;
Aplicação
Faturamento por produto, vendas por região, quantidade por categoria e outros indicadores.
13. HAVING
Diferença
WHERE filtra linhas antes do agrupamento; HAVING filtra grupos depois da agregação.
Exemplo
SELECT produto, SUM(valor) AS total FROM vendas GROUP BY produto HAVING SUM(valor) > 1000000;
Regra prática
Quando o critério depende de uma função agregada, HAVING é frequentemente a escolha adequada.
14. NULL
Conceito
NULL representa ausência ou desconhecimento de um valor. Não é o mesmo que zero ou uma string vazia.
Verificar
WHERE telefone IS NULL
Não nulo
WHERE telefone IS NOT NULL
Cuidado
Não use = NULL. Use IS NULL ou IS NOT NULL.
15. JOIN
Conceito
JOIN combina dados de duas ou mais tabelas através de uma relação.
INNER JOIN
Retorna os registos que possuem correspondência nas duas tabelas.
LEFT JOIN
Mantém todos os registos da tabela da esquerda e traz correspondências da direita.
RIGHT JOIN
Mantém todos os registos da tabela da direita, quando suportado.
Sebenta de SQL Página 5
FULL OUTER JOIN
Mantém correspondências e não correspondências de ambos os lados, quando suportado.
DICA DE OURO: Antes de escrever uma consulta complexa, formule primeiro a pergunta de negócio. Depois
determine quais tabelas, campos, filtros e agregações são necessários.
16. Exemplo de INNER JOIN
Consulta
SELECT [Link], [Link] FROM clientes c INNER JOIN vendas v ON [Link] = v.cliente_id;
Leitura
A tabela clientes é relacionada com vendas através de cliente_id.
Dica
Use aliases curtos, como c e v, para tornar consultas com várias tabelas mais legíveis.
17. LEFT JOIN e análise de faltas
Exemplo
SELECT [Link], [Link] FROM clientes c LEFT JOIN vendas v ON [Link] = v.cliente_id;
Aplicação
Pode identificar clientes que não possuem vendas usando uma condição sobre a tabela relacionada.
Insight
LEFT JOIN é muito importante em análises de cobertura e identificação de registos sem correspondência.
18. Subconsultas
Conceito
Uma subconsulta é uma consulta dentro de outra consulta.
Exemplo
SELECT nome FROM produtos WHERE preco > (SELECT AVG(preco) FROM produtos);
Aplicação
Comparar valores com médias, máximos, mínimos ou resultados de outras consultas.
19. CTE, Common Table Expression
Conceito
Uma CTE permite criar um resultado temporário nomeado dentro de uma consulta.
Exemplo
WITH vendas_produto AS (SELECT produto, SUM(valor) AS total FROM vendas GROUP BY produto) SELECT *
FROM vendas_produto;
Vantagem
Melhora a organização de consultas complexas e facilita a leitura.
DICA DE OURO: Antes de escrever uma consulta complexa, formule primeiro a pergunta de negócio. Depois
determine quais tabelas, campos, filtros e agregações são necessários.
Sebenta de SQL Página 6
20. CASE
Conceito
CASE cria lógica condicional dentro de uma consulta.
Exemplo
CASE WHEN stock = 0 THEN 'Sem Stock' WHEN stock < 10 THEN 'Stock Baixo' ELSE 'Normal' END
Aplicação
Criar categorias, estados, faixas de valores e indicadores.
21. Funções de texto
UPPER
Converte texto para maiúsculas em SGBD que suportam a função padrão.
LOWER
Converte texto para minúsculas.
LENGTH
Obtém o comprimento do texto, com variações entre SGBD.
CONCAT
Combina textos.
Nota
Funções e nomes podem variar conforme o SGBD.
22. Funções de data
Data atual
Funções como CURRENT_DATE são comuns em SQL padrão, mas podem variar.
Extrair partes
Pode analisar ano, mês e dia conforme as funções do SGBD.
Agrupar por período
É possível agrupar vendas por mês, trimestre ou ano.
Dica
Tenha cuidado com fusos horários e tipos TIMESTAMP em bases de dados reais.
23. INSERT, UPDATE e DELETE
INSERT
Insere novos registos.
UPDATE
Atualiza registos existentes.
DELETE
Remove registos.
Sebenta de SQL Página 7
Segurança
Antes de UPDATE ou DELETE, teste primeiro a condição com SELECT para confirmar quais registos serão
afetados.
24. CREATE TABLE
Conceito
CREATE TABLE define uma nova tabela.
Exemplo
CREATE TABLE clientes (id INT PRIMARY KEY, nome VARCHAR(100), cidade VARCHAR(100));
Tipos
Os tipos disponíveis dependem do SGBD, mas incluem números, texto, datas e valores booleanos.
25. Chaves e relacionamentos
PRIMARY KEY
Garante identificação única do registo.
FOREIGN KEY
Representa uma relação com outra tabela.
Integridade
As chaves ajudam a manter consistência entre tabelas.
Modelo
Uma base bem modelada reduz redundância e facilita consultas.
26. Normalização
Objetivo
Organizar os dados para reduzir redundâncias e problemas de atualização.
Ideia
Em vez de repetir informações de clientes em cada venda, mantenha clientes numa tabela e vendas
noutra, relacionadas por uma chave.
Benefício
Melhor consistência, manutenção e integridade dos dados.
27. Funções de janela
Conceito
Permitem calcular valores sobre um conjunto de linhas relacionado sem reduzir cada grupo a uma única
linha.
ROW_NUMBER
Numera linhas dentro de uma ordenação.
RANK
Cria posições ou rankings, permitindo empates.
Sebenta de SQL Página 8
SUM OVER
Pode calcular acumulados e totais por partição.
Aplicação
Ranking de vendedores, vendas acumuladas e comparação de cada registo com o seu grupo.
28. Exemplo de ranking
Consulta
SELECT vendedor, valor, RANK() OVER (ORDER BY valor DESC) AS ranking FROM vendas;
Aplicação
Identificar vendedores ou produtos com melhor desempenho.
Dica
Funções de janela são um dos conhecimentos que diferenciam um utilizador intermédio de um utilizador
avançado de SQL.
29. SQL para Análise de Dados
Perguntas típicas
Quanto vendemos? Qual produto vende mais? Qual região apresenta maior faturamento? Quem tem
melhor desempenho?
Fluxo
SELECT → filtrar → combinar → agrupar → calcular → ordenar.
Indicadores
SUM, COUNT, AVG, percentagens, rankings, crescimento e acumulados.
Boa prática
Escreva consultas que respondam a uma pergunta de negócio clara.
DICA DE OURO: Antes de escrever uma consulta complexa, formule primeiro a pergunta de negócio. Depois
determine quais tabelas, campos, filtros e agregações são necessários.
30. SQL aplicado à Logística
Stock
Consultar produtos abaixo do stock mínimo.
Movimentos
Analisar entradas e saídas por período.
Fornecedores
Comparar compras e desempenho.
Pedidos
Identificar pedidos pendentes e tempos de atendimento.
Exemplo
SELECT produto, stock FROM produtos WHERE stock < stock_minimo;
31. SQL aplicado à Administração e Finanças
Sebenta de SQL Página 9
Despesas
Agrupar despesas por categoria e período.
Vendas
Calcular faturamento por produto, cliente ou região.
Clientes
Identificar clientes ativos, inativos ou sem compras.
Folha de pagamento
Consultar e resumir informações conforme a estrutura da base e as regras do sistema.
32. Performance e índices
Índice
Um índice pode acelerar determinadas consultas ao facilitar a localização dos registos.
Cuidado
Índices também ocupam espaço e podem aumentar o custo de operações de escrita.
EXPLAIN
Muitos SGBD oferecem ferramentas como EXPLAIN para analisar o plano de execução.
Boa prática
Não crie índices indiscriminadamente. Avalie consultas reais e o comportamento do SGBD.
33. Segurança e boas práticas
DELETE e UPDATE
Teste a condição com SELECT antes de alterar ou eliminar dados.
SQL Injection
Em aplicações, utilize consultas parametrizadas em vez de concatenar diretamente valores fornecidos pelo
utilizador.
Princípio do menor privilégio
Conceda apenas as permissões necessárias a cada utilizador ou aplicação.
Backups
Bases de dados importantes devem possuir políticas de cópia de segurança e recuperação.
34. Erros comuns de iniciantes
Esquecer WHERE
Um UPDATE ou DELETE sem condição pode afetar muitos registos.
JOIN incorreto
Uma condição de JOIN mal definida pode multiplicar linhas e produzir totais errados.
GROUP BY
Todas as colunas não agregadas selecionadas precisam ser compatíveis com as regras do SGBD.
NULL
Trate NULL explicitamente quando ele tiver significado na análise.
Sebenta de SQL Página 10
Tipos
Compare valores com tipos compatíveis para evitar conversões inesperadas.
35. Projeto final: análise de vendas
Tabelas
Clientes, Produtos, Vendedores e Vendas.
Perguntas
Qual o faturamento por mês? Qual o produto mais vendido? Qual o vendedor com maior faturamento? Qual
região cresce mais?
Técnicas
JOIN, WHERE, GROUP BY, HAVING, CASE, CTE e funções de janela.
Resultado
Criar uma consulta ou conjunto de consultas que produza uma tabela analítica pronta para Excel, Power BI
ou outro sistema de BI.
36. Plano de estudo
Fase 1
SELECT, FROM, WHERE, ORDER BY, DISTINCT.
Fase 2
AND, OR, IN, BETWEEN, LIKE e NULL.
Fase 3
COUNT, SUM, AVG, MIN, MAX, GROUP BY e HAVING.
Fase 4
INNER JOIN, LEFT JOIN e relacionamentos.
Fase 5
Subconsultas, CASE e CTE.
Fase 6
Funções de janela e otimização.
Fase 7
Projetos reais de análise de dados.
Sebenta de SQL Página 11
37. Banco rápido de comandos
Objetivo Exemplo
Selecionar SELECT nome, cidade FROM clientes;
Filtrar SELECT * FROM clientes WHERE cidade = 'Luanda';
Ordenar SELECT * FROM produtos ORDER BY preco DESC;
Eliminar duplicados SELECT DISTINCT cidade FROM clientes;
Contar SELECT COUNT(*) FROM vendas;
Somar SELECT SUM(valor) FROM vendas;
Agrupar SELECT produto, SUM(valor) FROM vendas GROUP BY produto;
Filtrar grupos HAVING SUM(valor) > 1000000
Combinar tabelas INNER JOIN vendas v ON [Link] = v.cliente_id
Condicional CASE WHEN stock = 0 THEN 'Sem Stock' ELSE 'Normal' END
CTE WITH resumo AS (...) SELECT * FROM resumo;
38. Exemplo completo de análise
SELECT
[Link],
COUNT([Link]) AS quantidade_vendas,
SUM([Link]) AS faturamento,
AVG([Link]) AS venda_media
FROM vendas v
INNER JOIN produtos p
ON v.produto_id = [Link]
WHERE v.data_venda >= '2026-01-01'
GROUP BY [Link]
HAVING SUM([Link]) > 100000
ORDER BY faturamento DESC;
A consulta combina várias competências: JOIN para relacionar tabelas, WHERE para filtrar o período,
funções de agregação para criar indicadores, GROUP BY para resumir por categoria, HAVING para filtrar
grupos e ORDER BY para criar um ranking.
Conclusão
Aprender SQL é aprender a fazer perguntas aos dados. O domínio começa com SELECT e filtros, evolui
para agregações e JOINs e depois para CTEs, subconsultas, funções de janela e otimização. Para quem
pretende trabalhar com Data Analytics, Excel, Power BI e bases de dados, SQL é uma competência central.
Próximo nível: pratique com uma base de vendas ou logística e tente responder diariamente a perguntas
reais usando SQL. Depois avance para PostgreSQL ou SQL Server e ligue as consultas ao Power BI.
Sebenta de SQL Página 12