Programador Leigo
SQL 11 min leitura 10 FEV 2026

SQL para Pythonistas: do SELECT ao JOIN

Aprenda SQL com exemplos em Python. Consultas, filtros, agregações e joins.


Por que aprender SQL?

Mesmo usando ORMs como SQLAlchemy ou Django ORM, entender SQL é essencial. Em algum momento você vai precisar otimizar uma query, depurar um problema de performance ou trabalhar com um banco legado. SQL é a linguagem universal dos bancos de dados relacionais.

Vamos usar o SQLite com Python, que já vem instalado e não precisa de configuração:

import sqlite3

conexao = sqlite3.connect("loja.db")
cursor = conexao.cursor()

Criando tabelas e inserindo dados

Antes de consultar, precisamos de dados. Vamos criar uma estrutura simples de loja:

cursor.execute("""
    CREATE TABLE IF NOT EXISTS clientes (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        nome TEXT NOT NULL,
        email TEXT UNIQUE,
        cidade TEXT
    )
""")

cursor.execute("""
    CREATE TABLE IF NOT EXISTS pedidos (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        cliente_id INTEGER,
        produto TEXT NOT NULL,
        valor REAL NOT NULL,
        data TEXT DEFAULT CURRENT_DATE,
        FOREIGN KEY (cliente_id) REFERENCES clientes(id)
    )
""")

# Inserindo dados
clientes = [
    ("Ana Silva", "ana@email.com", "Sao Paulo"),
    ("Carlos Lima", "carlos@email.com", "Rio de Janeiro"),
    ("Julia Santos", "julia@email.com", "Sao Paulo"),
]

cursor.executemany(
    "INSERT INTO clientes (nome, email, cidade) VALUES (?, ?, ?)",
    clientes
)

pedidos = [
    (1, "Notebook", 3500.00),
    (1, "Mouse", 89.90),
    (2, "Teclado", 199.90),
    (3, "Monitor", 1200.00),
    (3, "Webcam", 250.00),
]

cursor.executemany(
    "INSERT INTO pedidos (cliente_id, produto, valor) VALUES (?, ?, ?)",
    pedidos
)

conexao.commit()

SELECT e WHERE: buscando dados

O SELECT é o comando mais usado em SQL. Ele busca dados de uma tabela e aceita filtros com WHERE:

# Todos os clientes
cursor.execute("SELECT * FROM clientes")
for linha in cursor.fetchall():
    print(linha)

# Clientes de Sao Paulo
cursor.execute("SELECT nome, email FROM clientes WHERE cidade = ?", ("Sao Paulo",))
for linha in cursor.fetchall():
    print(linha)

# Pedidos acima de R$200
cursor.execute("SELECT produto, valor FROM pedidos WHERE valor > 200")
for linha in cursor.fetchall():
    print(f"{linha[0]}: R${linha[1]:.2f}")

Funções de agregação

SQL oferece funções para calcular totais, médias e contagens diretamente no banco:

# Total gasto por todos os clientes
cursor.execute("SELECT SUM(valor) FROM pedidos")
total = cursor.fetchone()[0]
print(f"Total: R${total:.2f}")

# Media dos pedidos
cursor.execute("SELECT AVG(valor) FROM pedidos")
media = cursor.fetchone()[0]
print(f"Media: R${media:.2f}")

# Quantidade de pedidos por cliente
cursor.execute("""
    SELECT cliente_id, COUNT(*) as total_pedidos
    FROM pedidos
    GROUP BY cliente_id
    HAVING total_pedidos > 1
""")
for linha in cursor.fetchall():
    print(f"Cliente {linha[0]}: {linha[1]} pedidos")

JOIN: cruzando tabelas

O JOIN combina dados de duas ou mais tabelas. O INNER JOIN retorna apenas as linhas que têm correspondência em ambas:

cursor.execute("""
    SELECT c.nome, p.produto, p.valor
    FROM clientes c
    INNER JOIN pedidos p ON c.id = p.cliente_id
    ORDER BY p.valor DESC
""")

for linha in cursor.fetchall():
    print(f"{linha[0]} comprou {linha[1]} por R${linha[2]:.2f}")

# Total gasto por cliente
cursor.execute("""
    SELECT c.nome, SUM(p.valor) as total
    FROM clientes c
    INNER JOIN pedidos p ON c.id = p.cliente_id
    GROUP BY c.id
    ORDER BY total DESC
""")

for linha in cursor.fetchall():
    print(f"{linha[0]}: R${linha[1]:.2f}")

Conclusão

SQL é uma habilidade fundamental para qualquer desenvolvedor Python. Com SELECT, WHERE, funções de agregação e JOIN, você resolve a grande maioria dos problemas de consulta a dados. O próximo passo é aprender a usar essas queries dentro de um ORM como SQLAlchemy, combinando a expressividade do SQL com a praticidade do Python.

Continue lendo

Compartilhar