格式化 SQL 查询,使用适当的缩进和大小写,同时验证语法。使您的数据库查询立即可读且无错误。
一个简单的工具,用于格式化和验证您的 SQL 查询,提供适当的缩进和语法检查。
SQL 格式化器与验证器是一个强大且用户友好的在线工具,旨在帮助开发人员、数据库管理员和 SQL 初学者高效地格式化和验证他们的 SQL 查询。这个免费的工具会根据标准 SQL 语法规则自动格式化 SQL 命令,确保适当的缩进、大小写和空格,使您的查询更具可读性和可维护性。此外,它还执行验证检查,以识别在您执行查询之前可能存在的常见语法错误,从而节省数小时的调试时间。无论您是在编写复杂的数据库查询、学习 SQL 还是仅仅需要清理杂乱的 SQL 代码,这个格式化器和验证器都提供了一个直观的界面,可以立即改善您的 SQL 工作流程。
使用 SQL 格式化器与验证器非常简单:
该界面设计直观且响应迅速,能够在桌面和移动设备上无缝工作。
格式化器会自动将 SQL 关键字(如 SELECT、FROM、WHERE、JOIN 等)大写,使其与表名和列名区分开。这提高了可读性,并遵循标准 SQL 风格规范。
SQL 查询根据其逻辑结构进行缩进:
格式化器在查询的逻辑点插入换行:
还会在运算符、括号和子句之间添加适当的空格,以增强可读性。
验证器检查常见的 SQL 语法错误并提供清晰的反馈:
验证器还识别常见的逻辑错误:
当检测到错误时,会以清晰、用户友好的格式显示:
SQL 格式化器遵循以下特定规则,以确保一致、可读的 SQL:
所有 SQL 关键字均大写,包括:
格式化前:
1select u.id, u.name, o.order_date from users u join orders o on u.id = o.user_id where o.status = "completed" group by u.id order by u.name;
2
格式化后:
1SELECT
2 u.id,
3 u.name,
4 o.order_date
5FROM users u
6 JOIN orders o ON u.id = o.user_id
7WHERE
8 o.status = "completed"
9GROUP BY
10 u.id
11ORDER BY
12 u.name;
13
验证器检查以下问题:
无效 SQL 及错误:
1SELECT user_id, COUNT(*) FROM orders
2JOIN users
3WHERE status =
4GROUP BY
5HAVING count > 10;
6
验证错误:
SQL 格式化器与验证器在多个场景中都非常有价值:
虽然我们的 SQL 格式化器与验证器提供了基本功能,但还有其他替代方案可供考虑:
SQL(结构化查询语言)于 1970 年代在 IBM 开发,首个商业实现于 1979 年发布。美国国家标准协会(ANSI)于 1986 年发布了首个 SQL 标准,随后国际标准化组织(ISO)于 1987 年发布。
随着 SQL 通过多个标准(SQL-86、SQL-89、SQL-92、SQL:1999、SQL:2003、SQL:2008、SQL:2011、SQL:2016 和 SQL:2019)不断演变,格式化实践也发展起来,以改善代码的可读性和可维护性。
在 SQL 的早期,格式化不一致,主要基于个人偏好。随着数据库系统变得更加复杂,团队开发变得普遍,标准化格式化的需求也随之增长。
SQL 格式化历史上的关键里程碑:
SQL 验证已经从简单的语法检查演变为更复杂的分析:
未格式化:
1select id, first_name, last_name, email from customers where status = 'active' order by last_name, first_name;
2
格式化后:
1SELECT
2 id,
3 first_name,
4 last_name,
5 email
6FROM
7 customers
8WHERE
9 status = 'active'
10ORDER BY
11 last_name,
12 first_name;
13
未格式化:
1select c.id, c.name, o.order_date, o.total_amount from customers c left join orders o on c.id = o.customer_id where o.order_date >= '2023-01-01' and o.status != 'cancelled' order by o.order_date desc;
2
格式化后:
1SELECT
2 c.id,
3 c.name,
4 o.order_date,
5 o.total_amount
6FROM
7 customers c
8 LEFT JOIN orders o ON c.id = o.customer_id
9WHERE
10 o.order_date >= '2023-01-01'
11 AND o.status != 'cancelled'
12ORDER BY
13 o.order_date DESC;
14
未格式化:
1select d.department_name, (select count(*) from employees e where e.department_id = d.id) as employee_count, (select avg(salary) from employees e where e.department_id = d.id) as avg_salary from departments d where d.active = true having employee_count > 0 order by avg_salary desc;
2
格式化后:
1SELECT
2 d.department_name,
3 (
4 SELECT
5 COUNT(*)
6 FROM
7 employees e
8 WHERE
9 e.department_id = d.id
10 ) AS employee_count,
11 (
12 SELECT
13 AVG(salary)
14 FROM
15 employees e
16 WHERE
17 e.department_id = d.id
18 ) AS avg_salary
19FROM
20 departments d
21WHERE
22 d.active = TRUE
23HAVING
24 employee_count > 0
25ORDER BY
26 avg_salary DESC;
27
以下是如何在各种编程语言中实现 SQL 格式化的示例:
1// JavaScript SQL 格式化示例,使用 sql-formatter 库
2const sqlFormatter = require('sql-formatter');
3
4function formatSQL(sql) {
5 return sqlFormatter.format(sql, {
6 language: 'sql',
7 uppercase: true,
8 linesBetweenQueries: 2,
9 indentStyle: 'standard'
10 });
11}
12
13const rawSQL = "select id, name from users where status='active'";
14const formattedSQL = formatSQL(rawSQL);
15console.log(formattedSQL);
16
1# Python SQL 格式化示例,使用 sqlparse
2import sqlparse
3
4def format_sql(sql):
5 return sqlparse.format(
6 sql,
7 reindent=True,
8 keyword_case='upper',
9 identifier_case='lower',
10 indent_width=2
11 )
12
13raw_sql = "select id, name from users where status='active'"
14formatted_sql = format_sql(raw_sql)
15print(formatted_sql)
16
1// Java SQL 格式化示例,使用 JSqlParser
2import net.sf.jsqlparser.parser.CCJSqlParserUtil;
3import net.sf.jsqlparser.statement.Statement;
4
5public class SQLFormatter {
6 public static String formatSQL(String sql) throws Exception {
7 Statement statement = CCJSqlParserUtil.parse(sql);
8 return statement.toString()
9 .replaceAll("(?i)SELECT", "\nSELECT")
10 .replaceAll("(?i)FROM", "\nFROM")
11 .replaceAll("(?i)WHERE", "\nWHERE")
12 .replaceAll("(?i)ORDER BY", "\nORDER BY");
13 }
14
15 public static void main(String[] args) throws Exception {
16 String rawSQL = "select id, name from users where status='active'";
17 String formattedSQL = formatSQL(rawSQL);
18 System.out.println(formattedSQL);
19 }
20}
21
1<?php
2// PHP SQL 格式化示例
3function formatSQL($sql) {
4 // 将关键字替换为大写版本
5 $keywords = ['SELECT', 'FROM', 'WHERE', 'JOIN', 'LEFT JOIN', 'RIGHT JOIN',
6 'INNER JOIN', 'GROUP BY', 'ORDER BY', 'HAVING', 'LIMIT'];
7
8 $formattedSQL = $sql;
9 foreach ($keywords as $keyword) {
10 $formattedSQL = preg_replace('/\b' . preg_quote($keyword, '/') . '\b/i', "\n$keyword", $formattedSQL);
11 }
12
13 // 添加缩进
14 $lines = explode("\n", $formattedSQL);
15 $result = '';
16 $indentLevel = 0;
17
18 foreach ($lines as $line) {
19 $trimmedLine = trim($line);
20 if (!empty($trimmedLine)) {
21 $result .= str_repeat(" ", $indentLevel) . $trimmedLine . "\n";
22 }
23 }
24
25 return $result;
26}
27
28$rawSQL = "select id, name from users where status='active'";
29$formattedSQL = formatSQL($rawSQL);
30echo $formattedSQL;
31?>
32
SQL 格式化是将 SQL 代码结构化的过程,确保适当的缩进、换行和大小写,以使其更具可读性和可维护性。良好的 SQL 格式化遵循已建立的规范,如关键字大写、将子句放在单独的行上,以及对嵌套结构使用一致的缩进。
格式化 SQL 查询带来了几个好处:
此 SQL 格式化器支持标准 SQL 语法,适用于大多数主要数据库系统,包括:
虽然格式化器很好地处理标准 SQL,但某些特定于方言的功能可能无法得到最佳格式化。
验证器检查常见的语法错误和结构问题,但无法检测所有可能的错误,特别是与:
最好将其作为在数据库中执行查询之前的第一道防线。
目前,格式化器使用基于广泛接受的 SQL 规范的标准样式。未来版本可能会包括以下自定义选项:
是的,此工具完全在您的浏览器中处理所有 SQL 查询。您的 SQL 查询从未发送到任何服务器或存储在任何地方。这使得使用敏感或专有 SQL 代码时非常安全。
对于非常大的 SQL 查询:
此基于网络的工具需要互联网连接以进行初始加载。然而,一旦加载,它将在您的浏览器中完全运行。对于完全离线使用,可以考虑:
验证器专注于 SQL 版本(SQL-92 及更高版本)之间的通用语法元素。它可能无法识别某些特定于最新 SQL 标准或专有扩展的功能。对于版本特定的验证,请考虑使用数据库供应商提供的工具。
虽然此网络工具不提供直接集成,但许多 IDE 通过扩展或插件具有类似的格式化功能。对于自动化工作流程,可以考虑命令行工具,如:
今天就试用我们的 SQL 格式化器与验证器,提升您的 SQL 代码质量、可读性和正确性!