Guia de 21 dias

SQL em 21 dias

Toda empresa guarda dado num banco, e uma hora alguém vai te pedir um número. Front, back, dados ou produto: SQL aparece em todo lugar.

Para quem está começando do zero. Um dia por vez, na ordem. Cada dia tem uma tarefa e um vídeo.

SQL em 21 dias

O método

  • Digita cada query, nunca cola.
  • Erra de propósito pra ler o erro do banco.
  • Treina num banco teu, nunca em produção.
  • 40 minutos por dia.

Constância vence intensidade. Se perder um dia, continue de onde parou. Não tente compensar fazendo dois.

Semana 1 · dias 1 a 7

Perguntas pro banco

SELECT, WHERE, ORDER BY, LIMIT, COUNT/SUM/AVG e GROUP BY.

Cada query é uma pergunta. GROUP BY é tipo tabela dinâmica do Excel.

Dia01

Montando teu banco local

Instala o PostgreSQL com pgAdmin (ou o DB Browser for SQLite, se preferir algo mais leve) e cria um banco chamado estudo. Cria uma tabela de clientes com 5 linhas digitadas à mão e roda um SELECT * nela.

Instalando o PostgreSQL e Criando o Primeiro Banco de Dados (Hashtag Programação)
Assistir ↗

Dia02

SELECT

Escreve 10 consultas SELECT na tua tabela, escolhendo colunas diferentes e usando AS pra renomear. Erra o nome de uma coluna de propósito e lê a mensagem que o banco devolve.

Curso MySQL #11 - SELECT (Parte 1) (Curso em Vídeo)
Assistir ↗

Dia03

WHERE

Filtra a tabela com WHERE usando =, <>, >, AND, OR, IN, BETWEEN e LIKE. Faz pelo menos uma consulta com cada operador e anota o que cada uma devolveu.

Guia Completo de Operadores de Filtros no SQL (Hashtag Programação)
Assistir ↗

Dia04

ORDER BY

Ordena os resultados por uma coluna, depois por duas, com ASC e DESC. Combina ORDER BY com WHERE e confere se a ordem saiu como você esperava.

Como usar ORDER BY em consultas SQL e IN, BETWEEN, LIKE e NOT | SQL para Análise de Dados EP. 2 (Programação Dinâmica)
Assistir ↗

Dia05

LIMIT e OFFSET

Monta um top 3 dos clientes por algum valor usando ORDER BY e LIMIT. Depois pagina o resultado de 2 em 2 com OFFSET, como uma lista de site faria.

LIMIT e OFFSET - Curso de SQL com MySQL - Aula 10 (Otávio Miranda)
Assistir ↗

Dia06

COUNT, SUM e AVG

Cria uma tabela de pedidos com uns 15 registros e responde: quantos pedidos existem, qual a soma total, qual o ticket médio, o maior e o menor pedido. Testa o que COUNT(coluna) faz quando a coluna tem NULL.

Funções de Agregação no SQL (SUM, COUNT, AVG, MIN e MAX) - Curso de SQL - Aula 4 (Hashtag Programação)
Assistir ↗

Dia07

GROUP BY

Agrupa os pedidos por cliente e calcula total e quantidade de cada um. Tenta selecionar uma coluna fora do GROUP BY de propósito e lê o erro do banco.

Criando agrupamentos com GROUP BY - Curso de SQL - Aula 5 (Hashtag Programação)
Assistir ↗

Semana 2 · dias 8 a 14

Juntando tabelas

JOINs, HAVING, subqueries, CASE e INSERT/UPDATE/DELETE.

Clientes mais pedidos, um JOIN, e a resposta que o Excel não aguenta. E UPDATE sem WHERE é o susto que todo dev leva uma vez.

Dia08

INNER JOIN

Liga a tabela de pedidos à de clientes por uma chave estrangeira e lista o nome de cada cliente ao lado dos pedidos dele. Escreve o JOIN sem a cláusula ON uma vez pra ver o que acontece.

Relacionamento de Tabelas com INNER JOIN - Curso de SQL - Aula 6 (Hashtag Programação)
Assistir ↗

Dia09

LEFT e RIGHT JOIN

Cadastra dois clientes sem nenhum pedido. Compara o resultado de INNER JOIN e LEFT JOIN e escreve uma consulta que lista só os clientes que nunca compraram.

Diferença entre INNER JOIN e OUTER JOIN | Tipos de JOINS em SQL | SQL para Análise de Dados EP.8 (Programação Dinâmica)
Assistir ↗

Dia10

JOIN com várias tabelas

Cria uma tabela de produtos e uma de itens do pedido. Junta clientes, pedidos, itens e produtos numa consulta só que mostra quem comprou o quê.

Curso MySQL #16 - INNER JOIN com várias tabelas (Curso em Vídeo)
Assistir ↗

Dia11

HAVING

Lista os clientes que gastaram mais de um valor que você escolher, usando GROUP BY com HAVING. Tenta fazer o mesmo filtro com WHERE e entende por que o banco recusa.

Diferença Entre WHERE e HAVING no SQL (Hashtag Programação)
Assistir ↗

Dia12

Subqueries

Encontra os pedidos acima da média usando uma subquery no WHERE. Depois lista os produtos que nunca foram vendidos com NOT IN ou NOT EXISTS.

O que são Subconsultas SQL (Subqueries) em Bancos de Dados (Bóson Treinamentos)
Assistir ↗

Dia13

CASE

Classifica cada pedido como pequeno, médio ou grande com CASE WHEN. Depois conta quantos pedidos caem em cada faixa juntando CASE com GROUP BY.

Trabalhando com Estruturas Condicionais no SQL - CASE WHEN (Hashtag Programação)
Assistir ↗

Dia14

INSERT, UPDATE e DELETE

Insere 5 linhas novas, atualiza o preço de um produto e apaga um pedido de teste. Antes de cada UPDATE ou DELETE, roda o SELECT com o mesmo WHERE pra conferir quais linhas vão mudar.

Curso MySQL #07 - Manipulando Linhas (UPDATE, DELETE e TRUNCATE) (Curso em Vídeo)
Assistir ↗

Semana 3 · dias 15 a 21

SQL de produção

Índices, modelagem e normalização, window functions, transações e um projeto final com dataset real.

Quem domina isso vira a pessoa que o time chama.

Dia15

Índices

Gera uma tabela com 100 mil linhas usando generate_series e mede uma busca por uma coluna com EXPLAIN ANALYZE. Cria um índice nessa coluna, roda a mesma busca de novo e compara os tempos.

A melhor explicação sobre índices que você já viu (MQFS - Meu querido Firebird SQL)
Assistir ↗

Dia16

Modelagem

Desenha no papel as tabelas de uma biblioteca: livros, autores, leitores e empréstimos, com chaves primárias e estrangeiras. Depois cria essas tabelas no teu banco com CREATE TABLE.

Modelagem de Dados - Chave Primária, Estrangeira e outras (Bóson Treinamentos)
Assistir ↗

Dia17

Normalização

Monta uma tabela única e bagunçada de vendas, com nome e endereço do cliente repetidos em cada linha. Quebra essa tabela até chegar na terceira forma normal e escreve uma linha explicando cada divisão.

O que são as Formas Normais em Bancos de Dados? (Hashtag Programação)
Assistir ↗

Dia18

Window functions: ranking

Ranqueia os produtos por faturamento usando ROW_NUMBER, RANK e DENSE_RANK na mesma consulta. Coloca um empate nos dados de propósito e vê como cada função trata ele.

Série Funções de Janela no SQL para Análise de Dados - Aula 1 - Rankings com RANK() e DENSE_RANK() (Hashtag Programação)
Assistir ↗

Dia19

Window functions: PARTITION BY

Calcula o total acumulado de vendas por cliente com SUM() OVER (PARTITION BY ... ORDER BY ...). Depois pega o primeiro pedido de cada cliente usando ROW_NUMBER com PARTITION BY.

Série Funções de Janela no SQL para Análise de Dados - Aula 10 - Análises segmentadas: PARTITION BY (Hashtag Programação)
Assistir ↗

Dia20

Transações

Simula uma transferência entre duas contas com BEGIN, dois UPDATEs e COMMIT. Repete com ROLLBACK no meio e confere que nenhum saldo mudou.

Transações no MySQL - COMMIT e ROLLBACK (Bóson Treinamentos)
Assistir ↗

Dia21

Projeto final

Baixa um dataset público do Kaggle ou do dados.gov.br, importa no teu banco e escreve as 10 perguntas de negócio antes de começar. Responde cada uma com uma query e salva tudo num arquivo .sql comentado.

Projeto de Análise de Dados no MySQL (Hashtag Programação)
Assistir ↗

Projeto final

Publica no GitHub

Escolhe um dataset público real, como o de e-commerce brasileiro da Olist no Kaggle ou uma base do dados.gov.br, e importa no teu PostgreSQL. Escreve 10 perguntas de negócio, como faturamento por mês, top 10 produtos e clientes que compraram só uma vez, e responde cada uma com SQL usando JOIN, GROUP BY e pelo menos uma window function. Publica as queries comentadas no GitHub com um README que mostra as respostas.

Coloca um README dizendo o que o projeto faz e como rodar. É a primeira coisa que o recrutador abre.