如何使用 SQL 格式化工具
- 将一条或多条 SQL 语句粘贴到输入框中。
- 选择与您的数据库匹配的方言:标准 SQL、MySQL、PostgreSQL、SQL Server (T-SQL)、SQLite、MariaDB、BigQuery、Snowflake 或 Oracle PL/SQL。
- 选择关键字大小写:大写、小写,或保持原样。
- 设置缩进大小。
- 点击格式化SQL并复制结果。
您的查询在浏览器中格式化,绝不会被上传或存储,因此可以放心粘贴会暴露表名或业务逻辑的生产环境查询。
为什么要格式化 SQL?
SQL 对空白不敏感:数据库运行单行查询与运行整齐缩进的查询完全一样。但人读起来的感受却大不相同。从 ORM 日志、监控工具或慢查询报告中复制的查询通常是一整行长文本,很难看出哪些条件属于哪个连接或子查询。
格式化工具会把每个主要子句(SELECT、FROM、JOIN、WHERE、GROUP BY、ORDER BY)单独放在一行,并对嵌套部分进行一致的缩进。对比一下:
select u.id,u.email,count(o.id) as orders from users u left join orders o on o.user_id=u.id where u.created_at>='2026-01-01' group by u.id,u.email having count(o.id)>5 order by orders desc;
SELECT
u.id,
u.email,
COUNT(o.id) AS orders
FROM
users u
LEFT JOIN orders o ON o.user_id = u.id
WHERE
u.created_at >= '2026-01-01'
GROUP BY
u.id,
u.email
HAVING
COUNT(o.id) > 5
ORDER BY
orders DESC;
格式化后的版本更便于在拉取请求中审查、更便于调试,并且在日后有人添加列或条件时产生更干净的差异对比。
为什么方言很重要
每种数据库都用自己的语法扩展了标准 SQL。选择正确的方言,有助于格式化工具正确识别关键字、运算符和标识符引号:
| 方言 | 标识符引号 | 特有语法示例 |
|---|---|---|
| MySQL / MariaDB | `backticks` | LIMIT 10、ON DUPLICATE KEY UPDATE |
| PostgreSQL | "double quotes" | :: 类型转换、RETURNING、ILIKE |
| SQL Server (T-SQL) | [brackets] | SELECT TOP 10、@variables |
| BigQuery | `backticks` | STRUCT、UNNEST、SELECT * 中的 EXCEPT |
| Oracle PL/SQL | "double quotes" | FETCH FIRST 10 ROWS ONLY、BEGIN … END; 代码块 |
如果某条查询的格式化结果很奇怪,例如运算符被拆开,或关键字被当成了列名,切换到正确的方言通常就能解决。
格式化有助于发现的常见 SQL 错误
格式化工具既不会执行您的查询,也不会对其进行完整验证,但清晰的排版会让许多错误一目了然:
- select 列表中漏了逗号。
SELECT id name FROM users是合法的 SQL,但它会把id以别名name返回。每列占一行时,漏掉的逗号就很显眼。 - 在
WHERE中对外连接的表进行过滤。LEFT JOIN orders o … WHERE o.status = 'paid'会悄悄把外连接变成内连接。如果想保留未匹配的行,请把条件移到ON子句中。 - 混用
AND和OR却不加括号。AND的优先级高于OR,所以a OR b AND c的意思是a OR (b AND c)。请加上括号,让意图明确。 - 括号或引号不匹配。当输出的缩进突然错乱时,请检查该位置之前是否有未闭合的括号或字符串字面量。
技巧与最佳实践
- 关键字大写是一种广泛使用的约定,因为它把 SQL 语法与您的表名和列名区分开来;小写同样有效。每个项目选定一种即可。
- 在多表查询中始终为表设置别名,并限定列名(用
u.id而不是id)。 - 切勿通过拼接用户输入来构造 SQL。请使用参数化查询或预处理语句来防止 SQL 注入。
- 把时间戳存成了整数?请用 Unix时间戳转换器查看某个值的含义,并用 UUID生成器生成测试用的主键。
常见问题
格式化会改变我的查询的作用吗?
不会。格式化工具只更改空白、换行,以及(如果您这样选择)关键字大小写。标识符、字符串字面量和查询的逻辑都保持不变。
SQL 格式化工具会检查我的查询是否有效吗?
不会完整检查。它会对查询进行词法切分以便排版,所以严重损坏的输入可能产生奇怪的输出,但它不会检查表或列是否存在,也不会检查语句能否运行。这类检查请使用您的数据库或 EXPLAIN。
可以一次格式化多条语句吗?
可以。用分号分隔各条语句,每一条都会依次被格式化。
SQL 关键字应该大写吗?
在所有主流数据库中,SQL 关键字都不区分大小写,所以这纯粹是风格选择。大写是传统做法,在文档中很常见;许多现代团队更喜欢小写。重要的是保持一致。
更新于