把长SQL整理成可读的查询
从ORM或应用日志复制的SQL常常没有换行。在线SQL格式化工具会整理字段列表、JOIN条件和子查询的缩进,让你更容易沿着查询结构检查逻辑。这里的“SQL美化”指排版整理,并不会改写业务规则。
粘贴查询后,先选数据库方言,再选择2个空格、4个空格或制表符,以及关键字大小写。点击“格式化SQL”即可生成独立结果。原文仍在左侧,便于逐段对照;修改输入或选项后,旧结果会清空,需要重新格式化。
方言选原数据库,不是目标数据库
工具提供标准SQL、PostgreSQL、MySQL、MariaDB、SQLite、SQL Server(T-SQL)、Oracle SQL、BigQuery和Snowflake共9种选择。MySQL的反引号、T-SQL的方括号以及PostgreSQL的参数写法都有各自语境,选对方言有助于识别语句。
方言选择不会把MySQL转换成PostgreSQL,也不会替换函数或迁移表结构。Oracle SQL选项用于查询整理,不能据此认为存储过程也受支持。
排版之后,仍要检查查询含义
将WHERE和HAVING分开显示,可以更快定位行筛选与聚合筛选;为CTE和嵌套查询增加缩进,也有助于代码评审。不过,整齐的SQL仍可能引用不存在的字段,或返回不符合预期的数据。
关键字选项只调整识别到的SQL关键字;标识符、函数名和数据类型的大小写保持原样。字符串仍是数据,参数不会被填入实际值。注释会保留,但位置或空白可能调整。使用结果前,请结合数据库环境核对。
SQL格式化示例
下方使用虚构数据展示实际格式化结果,采用大写关键字和2个空格缩进。加载工具中的示例时,会自动选中相应方言。
JOIN与聚合
按客户汇总已支付订单,再筛选总额。格式化后,更容易区分关联条件、行筛选和聚合筛选。
SELECT
c.id,
c.name,
count(o.id) AS order_count,
sum(o.total) AS revenue
FROM
customers c
JOIN orders o ON o.customer_id = c.id
WHERE
o.status = 'paid'
GROUP BY
c.id,
c.name
HAVING
sum(o.total) > 1000
ORDER BY
revenue DESC;返回格式化工具 ↑CTE与窗口函数
用PostgreSQL的CTE和ROW_NUMBER对客户订单排序,查看嵌套SELECT如何展开。
WITH
ranked_orders AS (
SELECT
id,
customer_id,
total,
row_number() OVER (
PARTITION BY
customer_id
ORDER BY
created_at DESC
) AS position
FROM
orders
WHERE
created_at >= date '2024-01-01'
)
SELECT
customer_id,
id,
total
FROM
ranked_orders
WHERE
position = 1
ORDER BY
customer_id;返回格式化工具 ↑INSERT与注释
MySQL插入示例包含反引号、注释和带分号的字符串。引号中的分号属于数据。
-- Fictional seed data
INSERT INTO
`products` (`sku`, `name`, `price`)
VALUES
('DEMO-01', 'Desk lamp; warm light', 29.95),
('DEMO-02', 'Reader''s notebook', 8.50);返回格式化工具 ↑常见问题
如何复制或保存格式化结果?
完成格式化后点击“复制”,或使用下载按钮保存为formatted.sql。也可以按Ctrl+Enter或Command+Enter触发格式化。输入与设置发生变化时,先重新生成结果再导出。
SQL会上传到服务器吗?
格式化在浏览器的Web Worker中运行,工具不会将查询提交给格式化API、连接数据库、持久保存输入或把SQL写入网址。复制和下载由你主动操作。
格式化成功就说明SQL正确吗?
不能。工具不检查表名、列名、类型、访问权限或执行计划,也不会运行查询。语法验证和性能分析仍需使用对应数据库的工具。
能一次整理多条SQL吗?
可以用分号分隔普通SQL语句。识别到的字符串内部的分号仍会作为字符串内容处理。自定义DELIMITER命令、存储过程和客户端脚本不属于支持范围。
为什么提示无法格式化?
先检查方言是否匹配,再检查引号和括号是否成对。Jinja模板、应用代码插值和数据库扩展语法可能无法识别。单次输入上限为50,000个字符,任务超过10秒会停止;大脚本请分段整理。
占位符和注释会被删除吗?
工具不会为受支持的方言占位符替换参数值,注释也会保留,但注释排版可能变化。并非所有模板参数写法都能识别;禁用格式化的特殊注释还可能让局部内容保留原排版。
