Formatar e indentar uma consulta SQL

formata as suas consultas SQL para as tornar legíveis e compreensíveis, facilitando o desenvolvimento e a manutenção

Porquê a formatação SQL?

A formatação SQL permite tornar as queries SQL mais legíveis e compreensíveis para os programadores e administradores de bases de dados. Isto facilita o debug, a revisão de código e a otimização das queries. Um SQL bem formatado é essencial para manter a qualidade do código e colaborar eficazmente numa equipa de desenvolvimento.

Tipos de queries SQL suportados

Esta ferramenta suporta todos os tipos de queries SQL, incluindo instruções SELECT, INSERT, UPDATE, DELETE, bem como instruções de criação e modificação de tabelas (CREATE, ALTER, DROP).

Como formatar queries SQL

Na página de formatação, pode formatar a sua query SQL colando-a na área de texto prevista para o efeito.

Assim que a query SQL é submetida, é formatada e apresentada numa área de resultado. Se a query for inválida, será apresentado um erro com uma indicação da natureza do problema.

Utilizar o SQL formatado

Pode copiar o SQL formatado utilizando o botão de cópia previsto para o efeito. Isto facilita a integração das queries SQL nos seus projetos ou relatórios.

O seu código SQL deverá ter este aspeto:


SELECT u.id, u.name, u.email,
       p.product_name, p.price,
       o.order_date, o.quantity,
       (SELECT SUM(p2.price * o2.quantity)
        FROM orders o2
        JOIN products p2 ON o2.product_id = p2.id
        WHERE o2.user_id = u.id) as total_spent
FROM users u
JOIN orders o ON u.id = o.user_id
JOIN products p ON o.product_id = p.id
WHERE u.id IN (
    SELECT user_id
    FROM orders
    WHERE order_date >= '2023-01-01' AND order_date <= '2023-12-31'
    GROUP BY user_id
    HAVING COUNT(*) > 5
)
AND p.price > 50
ORDER BY u.name ASC, o.order_date DESC
LIMIT 10;

    

Perguntas frequentes

Que dialetos SQL são suportados: MySQL, PostgreSQL, SQL Server?

O formatador reconhece a sintaxe SQL padrão (ANSI) bem como as principais extensões de MySQL, PostgreSQL, SQL Server (T-SQL), Oracle (PL/SQL) e SQLite. As palavras-chave específicas de cada motor (LIMIT de MySQL e PostgreSQL, TOP de SQL Server, RETURNING de PostgreSQL, MERGE) são indentadas corretamente. As funções nativas próprias de um motor são conservadas tal como estão sem validação.

O formatador trata CTE e queries recursivas?

Sim. As CTE (Common Table Expressions) declaradas com WITH ... AS (...) são indentadas no seu próprio bloco, e as CTE recursivas (WITH RECURSIVE) são reconhecidas. Isto torna as queries complexas claramente mais legíveis, em especial as hierarquias (árvores, grafos) e as janelas deslizantes. As subqueries correlacionadas também são alinhadas com o seu âmbito pai.

Qual a diferença entre um formatador SQL e um otimizador de queries?

Um formatador SQL não altera a semântica da query: limita-se a reorganizar visualmente o código (quebras de linha, indentação, capitalização das palavras-chave). Um otimizador, esse, reescreve a query ou sugere modificações (índices em falta, joins a reorganizar, subqueries a transformar em joins) para melhorar o desempenho. Para analisar o plano de execução, utilize EXPLAIN ou EXPLAIN ANALYZE consoante o motor.

Os comentários SQL são preservados?

Sim. Os comentários inline -- comentário e os comentários multilinhas /* ... */ são conservados na sua localização original. É essencial para documentar uma query complexa ou marcar secções (TODO, hint para o otimizador, versão de uma migração). Se transmitir a query a um motor que interprete os hints comentados (/*+ INDEX(...) */ em Oracle), eles também são preservados.

Porque é que as palavras-chave SQL aparecem em maiúsculas?

Colocar as palavras-chave (SELECT, FROM, WHERE, JOIN) em maiúsculas é uma convenção histórica que as distingue visualmente dos identificadores (nomes de tabela, colunas). Esta prática facilita a leitura, sobretudo em queries longas. Os nomes de tabela e de coluna mantêm-se em contrapartida na sua capitalização original para respeitar as convenções do esquema (em particular no PostgreSQL onde a capitalização é sensível para identificadores citados).

O formatador valida a sintaxe SQL?

O formatador efetua uma análise sintática ligeira que deteta erros grosseiros (parênteses não equilibrados, ponto e vírgula em falta no fim de instrução, palavras-chave incoerentes). Não valida nem a existência das tabelas e colunas, nem a conformidade a um esquema preciso. Para isso, execute a query em modo EXPLAIN na sua base, ou utilize um linter dedicado como sqlfluff.

Exemplo de pedido

curl -X POST https://cdrn.fr/api/v1/tools/sql-formatter/execute \
  -H "Content-Type: application/json" \
  -d '{"input":"..."}'

Esquema de entrada

Campo Tipo Obrigatório Predefinição
input text

Pontos de acesso

  • GET https://cdrn.fr/api/v1/tools - lista todas as ferramentas disponíveis
  • GET https://cdrn.fr/api/v1/tools/sql-formatter - obtém o esquema desta ferramenta
  • POST https://cdrn.fr/api/v1/tools/sql-formatter/execute - executa esta ferramenta com um payload JSON