Skip to content

Instantly share code, notes, and snippets.

@coproduto
Last active December 27, 2025 13:23
Show Gist options
  • Select an option

  • Save coproduto/5e8cec614a86f1d5668e5322a8b2e67c to your computer and use it in GitHub Desktop.

Select an option

Save coproduto/5e8cec614a86f1d5668e5322a8b2e67c to your computer and use it in GitHub Desktop.

Roadmap de estudos de SQL

Aviso: Muitas vezes detalhes de vÔrias operações podem variar de banco para banco. Em questões onde fiquei em dúvida, este documento segue o funcionamento do PostgreSQL, pois é o banco que conheço melhor.

PrƩ-requisito: Ɓlgebra Relacional bƔsica

Antes de começar a escrever SQL, você precisa entender o modelo de como um banco de dados relacional funciona. Não precisa se aprofundar muito, mas você precisa entender como que dados e relacionamentos entre eles são representados. (Nota importante: Relacionamento e relação não são a mesma coisa!)

Coisas que vocĆŖ precisa saber responder:

  • O que Ć© uma relação?
  • Como dados sĆ£o representados em uma relação?
  • Como podemos expressar relacionamentos entre relaƧƵes distintas?

Você vai ver um monte de operações matemÔticas complexas estudando isso. Não se preocupe demais, a este ponto você só precisa entender a lógica geral.

Nƭvel BƔsico

Buscando dados

O ideal é começar com um banco de dados jÔ predefinido e aprender a buscar dados de vÔrias formas nele. Você pode usar bancos jÔ prontos para aprendizado como o https://mystery.knightlab.com/ ou pegar datasets como os que tem aqui: https://learnsql.com/blog/free-online-datasets-to-practice-sql/

O que vocĆŖ precisa aprender nessa fase:

  • Filtrar as linhas de uma tabela usando WHERE
  • Remover linhas duplicadas usando DISTINCT
  • Combinar condiƧƵes usando AND, OR e NOT
  • Ordenar os resultados usando ORDER BY
  • Limitar a quantidade de resultados usando LIMIT ou TOP
  • Filtrar strings usando LIKE

Atualizando dados

O que vocĆŖ precisa aprender nessa fase:

  • Atualizar dados no banco usando UPDATE
  • Apagar dados do banco usando DELETE

Fazendo agregaƧƵes nos dados selecionados

O que vocĆŖ precisa aprender nessa fase:

  • Selecionar dados agregados usando COUNT(), AVG(), SUM(), MIN() e MAX()
  • Agrupar linhas usando GROUP BY e colcular agregaƧƵes sobre cada grupo

Nƭvel BƔsico+

Agora que você aprendeu a buscar e atualizar dados, é a hora de começar a modelar seus próprios dados. Tem vÔrios exemplos clÔssicos, mas o ideal é você tentar modelar algo que seja interessante pra você ou tentar fazer algo baseado nos datasets de exemplo que mandei acima.

Modelagem relacional

O que vocĆŖ precisa aprender nessa fase:

  • Aprender como pegar dados estruturados e convertĆŖ-los em um modelo relacional normalizado. VocĆŖ pode usar recursos como o Guia de normalização do TowardsDataScience
  • Aprender sobre chaves primĆ”rias e chaves estrangeiras
  • Praticar a modelagem criando schemas SQL usando CREATE TABLE
  • Aprender a inserir dados usando INSERT
  • Aprender a gerenciar as tabelas do seu banco usando ALTER TABLE e DROP TABLE

Constraints

Em geral, você quer impor restrições sobre os dados que entram no banco. Em geral é melhor impedir dados invÔlidos de entrarem no banco com constraints e não deixar o controle disso só na aplicação que acessa o banco.

O que vocĆŖ precisa aprender nessa fase:

  • Impedir valores duplicados em tabelas com o constraint UNIQUE
  • Impedir valores nulos em colunas com o constraint NOT NULL
  • Aplicar condiƧƵes arbitrĆ”rias sobre dados com o constraint CHECK

Selecionando de mĆŗltiplas tabelas

Até agora você estava selecionando dados de uma tabela só, mas no mundo real muitas vezes precisamos encontrar dados de vÔrias tabelas. Por exemplo, em um sistema de venda de passagens, encontrar as passagens compradas por um determinado usuÔrio.

O que vocĆŖ precisa aprender nessa fase:

  • Juntar os dados em comum de tabelas usando INNER JOIN
  • Selecionar os dados de uma tabela que estĆ£o presentes em outra usando LEFT JOIN e RIGHT JOIN
  • Combinar tabelas usando FULL OUTER JOIN
  • Selecionar dados hierĆ”rquicos e fazer comparaƧƵes usando self-joins

Organizando queries

Com JOIN, suas queries vão começar a ficar bastante complexas. Para organizÔ-las, você pode separÔ-las em fragmentos reutilizÔveis utilizando Common Table Expressions.

O que vocĆŖ precisa aprender nessa fase:

  • Usar os resultados de uma query em outra com subqueries
  • Compor queries complexas a partir de fragmentos simples usando WITH
  • Aprenda a diferenƧa entre CTEs e subqueries e por que em geral Ć© melhor usar CTEs

Nƭvel IntermediƔrio

Você jÔ sabe a maior parte das features necessÔrias para compor queries complexas. Agora iremos estudar algumas operações mais exóticas e como manter a integridade de dados do seu banco quando ele é consultado por uma aplicação.

OperaƧƵes menos comuns

O que vocĆŖ precisa aprender nessa fase:

  • Juntar os resultados de vĆ”rias queries usando UNION, INTERSECTION e EXCEPT
  • Criar condicionais usando CASE
  • Tratar valores nulos usando COALESCE e NULLIF
  • Fazer comparaƧƵes com listas de valores usando ANY, ALL e EXISTS

Teoria: ACID

O que vocĆŖ precisa aprender nessa fase:

  • O que Ć© cada uma das propriedades da sigla ACID
  • Como os bancos SQL garantem as propriedades ACID

ƍndices

ƍndices servem para acelerar queries sobre campos especĆ­ficos. VocĆŖ pode usar Ć­ndices para acelerar a execução de queries frequentes. Recomendo ler os primeiros capĆ­tulos do Use the Index, Luke!.

TransaƧƵes

Muitas vezes você precisa fazer vÔrias queries de escrita e possivelmente de leitura no banco de forma tal que, se uma delas falha, o banco deve ficar no estado inicial. Isso é possível em SQL usando transações - blocos de queries associadas entre si.

Este é um tópico que varia bastante entre implementações de bancos de dados.

O que vocĆŖ precisa aprender nessa fase:

  • Criar, confirmar e cancelar transaƧƵes usando BEGIN, COMMIT e ROLLBACK
  • Aprender sobre os nĆ­veis de isolamento de transaƧƵes
  • Estudar quais garantias o seu banco dĆ” em cada nĆ­vel de isolamento disponĆ­vel nele
  • Aprender a usar transaƧƵes junto com constraints para garantir seguranƧa de forma eficiente
  • Praticar bastante usar transaƧƵes, especialmente em situaƧƵes de vĆ”rios acessos simultĆ¢neos

Locking

Ɖ relativamente comum precisar ler um dado na aplicação, fazer alguma operação com ele e escrever de volta no banco de dados. Isso pode causar problemas se o valor desse dado for alterado entre a leitura e a escrita. Para impedir isso, Ć© possĆ­vel trancar partes do banco de dados para que ele nĆ£o possa ser modificado atĆ© que alguma condição seja satisfeita.

Este é um tópico que varia bastante entre implementações de bancos de dados.

O que vocĆŖ precisa aprender nessa fase:

  • Antes de estudar locking, aprenda a evitar locking com UPDATEs bem planejados! Locking sempre tem um custo de performance e deve ser evitado sempre que possĆ­vel.
  • Trancar dados que serĆ£o escritos posteriormente usando SELECT FOR UPDATE ou UPDLOCK.
  • Aprenda quais sĆ£o os nĆ­veis de locking que seu banco oferece e as diferenƧas entre eles.
  • Aprenda a fazer "locking otimista" usando um campo de versionamento na tabela.

FunƧƵes built-in

Em geral servidores SQL oferecem vÔrias funções para manipular dados mais complexos como datas, números, tipos compostos, etc.

Este é um tópico que varia bastante entre implementações de bancos de dados.

O que vocĆŖ precisa aprender nessa fase:

  • Aprenda quais sĆ£o os tipos de dados do seu banco. VocĆŖ provavelmente aprendeu o bĆ”sico modelando tabelas, mas vocĆŖ sabia que, por exemplo, o Postgres tem uma sĆ©rie de tipos especĆ­ficos pra fazer queries sobre dados geomĆ©tricos, como por ex determinar se um conjunto de coordenadas estĆ” dentro de uma determinada Ć”rea?
  • Aprenda a converter entre tipos de dados com CAST
  • Para cada um dos tipos, pesquise as funƧƵes que seu banco oferece para tratĆ”-lo.
  • Em especial, aprenda os operadores de datas! Ɖ extremamente comum precisar fazer coisas como computar uma data a partir de dia, mĆŖs e ano, ou somar um intervalo a uma data, ou determinar se uma data estĆ” entre duas outras.

Nƭvel avanƧado

Otimização

Uma query lenta pode ser o gargalo da sua aplicação inteira. Para otimizar queries, precisamos entender por que elas ficam lentas, e para isso precisamos saber o que o banco estÔ fazendo.

O que vocĆŖ precisa aprender nesta fase:

  • Gerar planos de execução e estatĆ­sticas de execução com EXPLAIN e EXPLAIN ANALYZE
  • Aprender a ler os planos de execução e identificar gargalos usando eles
  • Aprender a resolver os gargalos encontrados refatorando queries e adicionando Ć­ndices onde necessĆ”rio
  • Recomendo terminar de ler o Use the Index, Luke!

Window Functions

Funções de janela servem para fazer um cÔlculo sobre vÔrias linhas escolhidas a partir de uma linha inicial. Por exemplo: Para cada funcionÔrio de uma empresa, você pode querer saber se o salÔrio dele é maior que o salÔrio médio dos funcionÔrios do mesmo departamento. Com uma função de janela, isso pode ser feito em uma única query.

O que vocĆŖ precisa aprender nesta fase:

  • Quais sĆ£o as funƧƵes de janela suportadas pelo seu banco
  • Criar anĆ”lises complexas usando funƧƵes de janela

PL/SQL

Ɖ possĆ­vel criar suas próprias funƧƵes ou triggers (operaƧƵes que sĆ£o disparadas quando ocorre algum evento especĆ­fico) usando a extensĆ£o PL/SQL, uma linguagem procedural executada pelo próprio banco. Vale a pena aprender um pouco de PL/SQL para implementar funcionalidades avanƧadas.

O que vocĆŖ precisa aprender nessa fase:

  • Escrever funƧƵes que manipulam o banco usando PL/SQL
  • Criar triggers para que o banco se atualize sozinho em resposta a certos eventos

Administração de banco de dados

Para configurar o banco de dados, você provavelmente precisou criar um usuÔrio e dar certas permissões a ele. Se você trabalha com DB numa empresa, provavelmente os usuÔrios necessÔrios foram criados para você. Mas agora é a hora de aprender a gerenciar usuÔrios, permissões, bancos de dados (um único servidor pode gerir vÔrios bancos) e configurações do banco.

Este tópico é diferente para cada banco. Consulte a documentação do seu banco para estudar este tópico.

ExtensƵes

Todos os bancos SQL implementam extensões. Por exemplo, vÔrios bancos permitem que você defina funções em linguagens de programação diferentes de PL/SQL. Consulte a documentação do seu banco e aprenda como as extensões dele funcionam.

Funcionamento interno do banco

Consulte a documentação do seu banco e estude como ele implementa features do SQL que jÔ estudamos como transações, índices, ACID e assim por diante. Isso terÔ implicações importantes para otimização avanÔcada de performance.

@brunopascoal
Copy link
Copy Markdown

great.

@arrudacaio
Copy link
Copy Markdown

Muito bom!

@dnsouzadev
Copy link
Copy Markdown

nice

@JotaVPinheiro
Copy link
Copy Markdown

a boa, filho šŸ‘

@nicolasteofilo
Copy link
Copy Markdown

Muito bom, obrigado por compartilhar!

@DenisVousin
Copy link
Copy Markdown

Valeu amigo, vou ingressar na programação em busca do meu estÔgio e seu roadmap vai me ajudar bastante, muito obrigado de verdade.

@DanielhMuller
Copy link
Copy Markdown

muito obrigado, graças ao teu guia me sinto menos perdido na programação e jÔ sei o que vou focar.

@LuisDomiciano
Copy link
Copy Markdown

Muito bem-feito esse guia.

@Hukissy-kulembe
Copy link
Copy Markdown

Gostei, vai dar para basear os meus estudos aqui!

@ggteixeira
Copy link
Copy Markdown

Obrigado por compartilhar!

@dev-Chaves
Copy link
Copy Markdown

Valeu por compartilhar !!! conteĆŗdo brabo

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment