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
uf

pedidos FK

id_pedido
id_cliente
status
total

produtos

id_produto
nome
categoria
preco

vendas

id_venda
id_cliente
id_produto
valor_total
Nesta aula, vamos usar exemplos simples com clientes, produtos, pedidos e vendas.

Mapa geral

Categorias principais do SQL

As categorias aparecem em momentos diferentes do ciclo de vida dos dados.

01DDL

Define a estrutura: tabelas, colunas e objetos.

02DML

Movimenta os registros dentro das tabelas.

03DCL

Define quem pode acessar ou alterar dados.

04DQL

Consulta os dados para análise e validação.

05Prática

Transforma perguntas de negócio em SELECT.

DDL CREATE, ALTER, DROP
DML INSERT, UPDATE, DELETE
DCL GRANT, REVOKE
DQL 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 mexe no desenho da casa: paredes, cômodos e portas. Não é sobre uma venda específica, é sobre a estrutura que recebe os dados.

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;
Antes de executar DROP ou TRUNCATE em ambiente real, confirme impacto, backup e permissões.

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.

Em DML, o WHERE é o cinto de segurança de UPDATE e DELETE.

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 costuma aparecer mais em administração de banco, governança e segurança de dados.

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;
A sintaxe de usuários e permissões pode variar entre PostgreSQL, MySQL, SQL Server e Oracle. A ideia central é a mesma: conceder e remover acesso.

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.

01Pergunta

Quem comprou? Quanto vendeu? Onde caiu?

02SELECT

Busca uma parte específica da base.

03Validação

Confere totais, filtros e duplicidades.

04Relatório

Alimenta planilha, BI ou dashboard.

05Decisão

Transforma dado em ação.

BI

Indicadores quase sempre nascem de SELECT.

Dados

Investigações começam filtrando e cruzando tabelas.

Qualidade

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_clientenomeufdata_cadastro
1Ana LimaAM2026-01-10
2Bruno RochaRO2026-01-12
3Carla SouzaSP2026-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.

COUNT: quantidade SUM: soma AVG: média MIN/MAX: extremos HAVING: filtro do grupo
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
total

clientes

id_cliente
nome
uf
SELECT
  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';
A chave estrangeira em pedidos aponta para a chave primária de clientes. É esse vínculo que permite juntar as tabelas.

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.

01SELECT

Escolher tabela e colunas.

02WHERE

Filtrar linhas relevantes.

03GROUP BY

Criar métricas por grupo.

04JOIN

Combinar tabelas relacionadas.

05CTE

Organizar consultas maiores.

Na base prática, os alunos vão sair de um SELECT simples até uma consulta analítica completa.