Aula 03
SQL na prática: comandos, categorias e consultas
Da visão geral do SQL até consultas úteis com filtros, agrupamentos, joins e CTE.
DDL
Criar e alterar estruturas do banco.
DML
Inserir, atualizar e excluir registros.
DCL
Controlar permissões e acessos.
DQL
Consultar dados com SELECT.
Conceito
O que é SQL
SQL é a linguagem usada para trabalhar com dados em bancos relacionais.
Com ela, criamos tabelas, registramos informações, controlamos acesso e fazemos perguntas para os dados.
clientes PK
id_cliente
nome
ufpedidos FK
id_pedido
id_cliente
status
totalprodutos
id_produto
nome
categoria
precovendas
id_venda
id_cliente
id_produto
valor_totalMapa geral
Categorias principais do SQL
As categorias aparecem em momentos diferentes do ciclo de vida dos dados.
Define a estrutura: tabelas, colunas e objetos.
Movimenta os registros dentro das tabelas.
Define quem pode acessar ou alterar dados.
Consulta os dados para análise e validação.
Transforma perguntas de negócio em SELECT.
DDL
Data Definition Language
DDL define a estrutura do banco.
Use DDL quando precisa criar, modificar, limpar completamente ou remover objetos como tabelas.
CREATE
Cria uma tabela ou outro objeto.
ALTER
Altera a estrutura de algo existente.
DROP
Remove o objeto do banco.
TRUNCATE
Apaga todos os registros de uma tabela.
DDL na prática
Exemplos de DDL
CREATE TABLE clientes (
id_cliente INT PRIMARY KEY,
nome VARCHAR(100) NOT NULL,
uf CHAR(2) NOT NULL
);
ALTER TABLE clientes
ADD COLUMN email VARCHAR(120);
TRUNCATE TABLE vendas;
DROP TABLE clientes_teste;
DML
Data Manipulation Language
DML manipula os registros que estão dentro das tabelas.
É a categoria usada para carregar cadastros, corrigir dados e remover linhas específicas.
INSERT
Insere novos registros.
UPDATE
Atualiza registros existentes.
DELETE
Remove registros que atendem ao filtro.
DML na prática
Exemplos de DML
INSERT INTO clientes (id_cliente, nome, uf)
VALUES (1, 'Ana Lima', 'AM');
UPDATE clientes
SET uf = 'RO'
WHERE id_cliente = 1;
DELETE FROM pedidos
WHERE status = 'Cancelado';
INSERT INTO produtos (id_produto, nome, categoria, preco)
VALUES
(10, 'Notebook', 'Informática', 3500),
(11, 'Mouse', 'Informática', 80),
(12, 'Cadeira', 'Escritório', 650);
DCL
Data Control Language
DCL controla permissões e acessos.
Ela ajuda a responder quem pode consultar, inserir, atualizar ou remover dados.
GRANT
Concede permissão para usuário, papel ou grupo.
REVOKE
Remove uma permissão concedida anteriormente.
DCL na prática
Exemplos de DCL
CREATE ROLE analista_vendas
LOGIN PASSWORD 'trocar_senha';
GRANT SELECT
ON clientes
TO analista_vendas;
GRANT INSERT, UPDATE
ON pedidos
TO operador_vendas;
REVOKE UPDATE
ON pedidos
FROM operador_vendas;
DQL
Data Query Language
DQL é a categoria usada para consultar dados.
Na prática, quase sempre estamos falando de SELECT: escolher colunas, filtrar linhas, agrupar resultados e combinar tabelas.
SELECT coluna_1, coluna_2
FROM tabela
WHERE condicao
GROUP BY coluna_1
HAVING regra_do_grupo
ORDER BY coluna_2;
Análise
Por que o SELECT é tão importante
Boa parte do trabalho analítico começa com uma pergunta simples e vira uma consulta.
Quem comprou? Quanto vendeu? Onde caiu?
Busca uma parte específica da base.
Confere totais, filtros e duplicidades.
Alimenta planilha, BI ou dashboard.
Transforma dado em ação.
Indicadores quase sempre nascem de SELECT.
Investigações começam filtrando e cruzando tabelas.
Validações usam contagens, nulos e duplicidades.
SELECT básico
Primeiro passo: escolher tabela e colunas
Quando usar SELECT *
Bom para explorar uma tabela pequena e entender quais colunas existem.
Em bases grandes, prefira escolher as colunas necessárias.
SELECT *
FROM clientes;
SELECT nome, uf, data_cadastro
FROM clientes;
| id_cliente | nome | uf | data_cadastro |
|---|---|---|---|
| 1 | Ana Lima | AM | 2026-01-10 |
| 2 | Bruno Rocha | RO | 2026-01-12 |
| 3 | Carla Souza | SP | 2026-02-03 |
WHERE
Filtros básicos
WHERE limita quais linhas entram no resultado.
=
Igual a um valor.
<>
Diferente de um valor.
> <
Maior ou menor.
>= <=
Maior/menor ou igual.
Texto
Comparado entre aspas simples.
Datas
Use formato consistente.
SELECT *
FROM pedidos
WHERE status = 'Pago';
SELECT *
FROM vendas
WHERE valor_total >= 500;
WHERE
Filtros avançados
AND / OR
Combinam condições.
BETWEEN / IN
Filtram intervalos ou listas.
LIKE / IS NULL
Buscam padrões e valores ausentes.
SELECT id_pedido, id_cliente, data_pedido, total
FROM pedidos
WHERE status IN ('Pago', 'Enviado')
AND total BETWEEN 100 AND 1000
AND data_pedido IS NOT NULL;
SELECT nome, email
FROM clientes
WHERE nome LIKE 'Ana%'
OR email IS NULL;
Evolução
Exemplos com WHERE
Comece com um filtro simples e adicione critérios conforme a pergunta fica mais específica.
-- 1. Clientes de um estado
SELECT nome, cidade, uf
FROM clientes
WHERE uf = 'AM';
-- 2. Clientes de uma cidade específica
SELECT nome, cidade, uf
FROM clientes
WHERE uf = 'AM'
AND cidade = 'Manaus';
-- 3. Clientes com cadastro útil para contato
SELECT nome, email, cidade
FROM clientes
WHERE uf IN ('AM', 'RO')
AND email IS NOT NULL;
-- 4. Clientes cujo nome começa com A
SELECT nome, email, cidade
FROM clientes
WHERE uf IN ('AM', 'RO')
AND email IS NOT NULL
AND nome LIKE 'A%';
Agregação
GROUP BY
GROUP BY junta várias linhas em grupos.
Depois de agrupar, usamos funções como COUNT, SUM, AVG, MIN e MAX para calcular métricas.
SELECT
status,
COUNT(*) AS qtd_pedidos,
SUM(total) AS faturamento,
AVG(total) AS ticket_medio
FROM pedidos
GROUP BY status
HAVING SUM(total) > 1000;
Agregação na prática
Exemplos com GROUP BY
-- Total de vendas por cliente
SELECT id_cliente, SUM(valor_total) AS total_vendido
FROM vendas
GROUP BY id_cliente
ORDER BY total_vendido DESC;
-- Quantidade de pedidos por status
SELECT status, COUNT(*) AS qtd_pedidos
FROM pedidos
GROUP BY status
ORDER BY qtd_pedidos DESC;
-- Clientes com pelo menos R$ 1.000 vendidos
SELECT id_cliente, SUM(valor_total) AS total_vendido
FROM vendas
GROUP BY id_cliente
HAVING SUM(valor_total) >= 1000;
-- Produto com maior venda média
SELECT id_produto, AVG(valor_total) AS venda_media
FROM vendas
GROUP BY id_produto
ORDER BY venda_media DESC;
Relacionamentos
JOIN
JOIN combina dados entre tabelas relacionadas.
O INNER JOIN retorna apenas os registros que têm correspondência nos dois lados.
pedidos
id_pedido
id_cliente
totalclientes
id_cliente
nome
ufSELECT
p.id_pedido,
c.nome,
c.uf,
p.data_pedido,
p.total
FROM pedidos p
INNER JOIN clientes c
ON c.id_cliente = p.id_cliente
WHERE p.status = 'Pago';
Consultas organizadas
LEFT JOIN e CTE
-- LEFT JOIN mantém clientes sem pedido
SELECT
c.nome,
COUNT(p.id_pedido) AS qtd_pedidos
FROM clientes c
LEFT JOIN pedidos p
ON p.id_cliente = c.id_cliente
GROUP BY c.nome;
-- CTE organiza uma consulta em etapas
WITH vendas_cliente AS (
SELECT id_cliente, SUM(valor_total) AS total_vendido
FROM vendas
GROUP BY id_cliente
)
SELECT c.nome, vc.total_vendido
FROM clientes c
LEFT JOIN vendas_cliente vc
ON vc.id_cliente = c.id_cliente
ORDER BY vc.total_vendido DESC;
LEFT JOIN
Útil quando o lado principal deve aparecer mesmo sem correspondência. Exemplo: clientes sem pedidos.
WITH
Cria uma etapa temporária legível. Ajuda a dividir uma consulta complexa em partes menores.
Fechamento
Agora é prática: evoluir consulta passo a passo
DDL
Estrutura do banco: criar e alterar tabelas.
DML
Registros: inserir, atualizar e excluir linhas.
DCL
Acesso: conceder e remover permissões.
DQL
Consulta: transformar perguntas em SELECT.
Escolher tabela e colunas.
Filtrar linhas relevantes.
Criar métricas por grupo.
Combinar tabelas relacionadas.
Organizar consultas maiores.
Na base prática, os alunos vão sair de um SELECT simples até uma consulta analítica completa.