Geração de query SQL
Descreve em português, IA monta SQL pra você
As cilada de escrever SQL
3 tabela dando JOIN, quando roda resultado tem 10 vezes mais linha que esperava — qual JOIN tá errado? Fica 30 minuto procurando, no final era relação many-to-many que não tratou certo.
Subquery 3 aninhada, escreve sozinho já não entende mais. Colega pergunta "esse SQL faz o quê", você olha 2 minuto e fala "deixa eu pensar".
Ainda tem problema de performance: um query roda 30 segundo, EXPLAIN não explica nada. Coloca índice, fica ainda mais lento? Que tá errado?
Você fala em linguagem comum "busca pra cada usuário total gasto últimas 30 dia, ordena de maior pra menor gasto", OpenClaw gera SQL certo.
Não é só traduzir: pensa em relação entre tabela, volume de dado, índice existente, gera SQL que funciona e rápido.
Encontra query lento? Cola SQL + resultado EXPLAIN, ele diz onde tá gargalo, qual índice colocar, como reescrever mais rápido.Tipo ter um DBA ao lado respondendo sempre.
3 prompt de SQL, pega 90% do dia a dia
Do dia a dia ao otimização de performance, use quanto precisar.
Banco tem tabela assim:
- users (id, name, email, channel, created_at, status)
- user_profiles (user_id, age, gender, city)
Me escreve SQL:
1. Busca quantidade de usuário novo cada dia últimas 30 dia
2. Agrupa por canal de registro (channel)
3. Calcula também taxa de retenção no dia seguinte pra cada canal
4. Ordena por data mais novo primeiro
Banco é MySQL 8.0, tabela users tem cerca de 5 milhão linha.
Também sugere índice.
Esse SQL tá demorando 30 segundo, me otimiza:
[cola SQL que tá lento aqui]
Resultado de EXPLAIN:
[cola saída de EXPLAIN aqui]
Me analisa:
1. Gargalo tá onde (varredura completa? tabela temporária? ordenação de arquivo?)
2. Qual índice colocar (me manda comando CREATE INDEX)
3. Como reescrever SQL mais rápido (tem forma equivalente mas melhor?)
4. Estima tempo depois de otimizar
Banco: PostgreSQL 15, tabela tem uns 20 milhão linha.
Banco tem 3 tabela:
- users (id, name, registered_at)
- orders (id, user_id, product_id, amount, created_at, status)
- products (id, name, category, brand)
Me escreve query:
1. Total gasto de cada usuário (só conta pedido pronto)
2. Categoria que usuário mais compra (se tiver empate pega primeiro)
3. Primeira e última data que usuário comprou
4. Só usuário que comprou esse último ano
5. Ordena por total gasto maior pra menor, tira Top 100
Banco: MySQL 8.0. Me escreve com CTE pra ficar legível.
Configuração de conexão banco
Deixa OpenClaw conectar no banco e rodar query (opcional, não precisa pra gerar SQL).
# Conexão com banco de dado (opcional, depois pode rodar resultado direto)
database:
type: mysql # mysql / postgresql / sqlite
host: localhost
port: 3306
database: my_app
user: readonly_user # Recomenda muito usar conta que só lê!
password_env: DB_PASSWORD # Lê senha de variável, não escreve em aberto
# Limite de segurança
read_only: true # Só SELECT, proíbe mudar dado
max_rows: 10000 # Máximo de linha por query
timeout: 30 # Timeout de query em segundo
# Não precisa conectar banco, AI tira SQL pela descrição de tabela
# Só não consegue rodar resultado pra você validar
Escrever SQL: OpenClaw vs ChatGPT
Os dois geram SQL, mas tem diferença importante.
- Consegue ler schema do seu banco, SQL gerado combina com tabela real
- Conecta banco direto pra validar resultado do query (de conta leitura)
- Guarda contexto: query anterior, relação de tabela, pergunta depois não precisa repetir
- Roda local, estrutura de tabela e lógica de negócio não vaza
- Só consegue gerar SQL pela descrição da tabela que você dá, muita suposição
- Sem conseguir rodar SQL direto, certo ou errado testa lá
- Janela de contexto tem limite, lógica de negócio complexa depois esquece
- SQL gerado às vezes sintaxe certo mas lógica errado, difícil de rastrear