Thêm game tại WuGames.ioTài trợKhám phá kho game trình duyệt miễn phí — chơi ngay, không tải, không đăng ký.Chơi ngay

Định dạng & Nén SQL

Định dạng, làm đẹp và nén SQL an toàn cho 15 phương ngữ (BigQuery, Snowflake, Redshift, T-SQL). Kiểm tra phát hiện UPDATE/DELETE thiếu WHERE.

Chọn engine của bạn để định dạng từ khóa và cú pháp chính xác

Định dạng SQL - Format, Nén và Kiểm Tra trên 15 Phương Ngữ

Công cụ online mạnh mẽ giúp định dạng, làm đẹp và nén SQL an toàn, hỗ trợ 15 phương ngữ — SQL Chuẩn, MySQL, MariaDB, PostgreSQL, SQLite, T-SQL (SQL Server), Oracle PL/SQL, BigQuery, Snowflake, Redshift, DB2, Spark SQL, Trino/Presto, Hive và N1QL. Có tô sáng cú pháp, viết hoa từ khóa, thụt lề tùy chỉnh, nén nhận biết chuỗi và chú thích nên không bao giờ làm hỏng dữ liệu, cùng Kiểm Tra An Toàn tích hợp phát hiện câu lệnh UPDATE/DELETE thiếu mệnh đề WHERE và lệnh phá hủy TRUNCATE/DROP trước khi bạn chạy. Hoàn hảo cho database developer, DBA và kỹ sư backend khi rà soát script migration hoặc bảo trì.

Phong cách định dạng SQL chuẩn là gì?

Không có chuẩn chính thức duy nhất, nhưng quy ước được áp dụng rộng rãi nhất theo phong cách Joe Celko (từ SQL for Smarties): từ khóa CHỮ HOA, định danh chữ thường hoặc snake_case, một mệnh đề mỗi dòng (SELECT, FROM, WHERE, v.v.), các cột thụt vào dưới SELECT và các join căn dưới FROM. Công cụ hiện đại như sqlfluff, sql-formatter và pgFormatter triển khai các biến thể. Bản thân chuẩn SQL ISO/IEC 9075 chỉ định nghĩa cú pháp và ngữ nghĩa, không định nghĩa phong cách. Tài liệu của mỗi nhà cung cấp đề xuất hướng dẫn phong cách: Wiki PostgreSQL có trang code style, và T-SQL của SQL Server có hướng dẫn từ Microsoft Press. Sự nhất quán trong nhóm quan trọng hơn phong cách cụ thể được chọn.

Vì sao dùng CHỮ HOA cho từ khóa SQL?

Từ khóa chữ hoa (SELECT, FROM, WHERE, JOIN) phân biệt trực quan cú pháp SQL với định danh người dùng (tên bảng và cột), giúp đọc lướt truy vấn. Quy ước này có từ mainframe những năm 1970 nơi thẻ đục lỗ dùng toàn chữ hoa. Bộ phân tích SQL hiện đại không phân biệt chữ hoa thường cho từ khóa theo chuẩn ISO 9075, nên `select` hoạt động giống hệt `SELECT`. Một số nhóm hiện ưu tiên chữ thường vì tốc độ gõ và thẩm mỹ hiện đại — tài liệu Carbon (IBM) và API Stripe dùng chữ thường. Công cụ như sqlfluff cho phép cả hai với cấu hình `--rules L030`. Lựa chọn thuần túy thẩm mỹ; chọn một và áp dụng nhất quán.

JOIN nên được định dạng thế nào cho dễ đọc?

Mỗi JOIN trên dòng riêng, với mệnh đề ON thụt vào hoặc ở dòng kế. Phong cách hiện đại căn JOIN dưới FROM và nhóm điều kiện theo chiều dọc:
```
SELECT u.name, o.total
FROM users AS u
JOIN orders AS o ON o.user_id = u.id
LEFT JOIN profiles AS p ON p.user_id = u.id
WHERE o.created_at > '2024-01-01';
```
Cú pháp JOIN tường minh (chuẩn ANSI SQL-92) được ưu tiên hơn FROM phân tách bằng dấu phẩy ngầm vì tách sạch điều kiện join khỏi bộ lọc và ngăn tích Descartes vô tình. Kế hoạch EXPLAIN ANALYZE của PostgreSQL tối ưu cả hai dạng như nhau, nhưng khác biệt về dễ đọc cộng dồn trong truy vấn 5+ bảng.

Minify SQL là gì và có đáng làm không?

Minify SQL loại bỏ khoảng trắng, chú thích và ngắt dòng không cần thiết để giảm kích thước chuỗi truy vấn. Hữu ích khi nhúng SQL vào mã JavaScript/TypeScript gửi đến khách, trong tham số URL cho công cụ phân tích, hoặc trong payload JSON nơi mỗi byte quan trọng. Công cụ như `sql-minifier-cli` và `sqlmin` xử lý. Cảnh báo: SQL đã minify khó gỡ lỗi và duyệt, và hầu hết máy chủ cơ sở dữ liệu phân tích như nhau — không có lợi ích hiệu suất chạy. Hệ thống build hiện đại (Vite, Webpack) thường tự minify SQL nhúng. Giữ SQL nguồn có định dạng cho con người, chỉ minify lúc build cho triển khai sản xuất.

Tôi ngăn SQL injection trong truy vấn đã định dạng thế nào?

Luôn dùng truy vấn có tham số (prepared statement) thay vì nối chuỗi: `SELECT * FROM users WHERE id = $1` với `$1` được ràng làm tham số, không bao giờ `SELECT * FROM users WHERE id = ' + userId`. OWASP SQL Injection Prevention Cheat Sheet (2023) và CWE-89 liệt kê đây là hàng phòng thủ chính. Mọi SDK hiện đại hỗ trợ: `cursor.execute(sql, (id,))` của psycopg, `PreparedStatement.setInt(1, id)` của JDBC, `client.query(text, values)` của Node.js pg. Phong cách định dạng không ảnh hưởng bảo mật, nhưng không bao giờ chèn dữ liệu người dùng trực tiếp vào chuỗi SQL. Stored procedure và ORM thêm các lớp phòng thủ, nhưng tham số hóa đúng cách là nền tảng.

Định dạng & Nén SQL — Định dạng, làm đẹp và nén SQL an toàn cho 15 phương ngữ (BigQuery, Snowflake, Redshift, T-SQL). Kiểm tra phát hiện UPDAT
Định dạng & Nén SQL

Common Table Expression (CTE) là gì và tôi định dạng thế nào?

CTE là truy vấn con có tên được định nghĩa với từ khóa WITH, giới thiệu trong ISO SQL:1999 và được hỗ trợ bởi PostgreSQL, MySQL 8.0+, SQL Server và Oracle. Chúng cải thiện dễ đọc bằng cách chia truy vấn phức tạp thành các bước có tên tuần tự. Định dạng mỗi CTE thành khối riêng, phân tách bằng dòng trắng:
```
WITH active_users AS (
SELECT id, name FROM users WHERE last_login > NOW() - INTERVAL '30 days'
),
order_totals AS (
SELECT user_id, SUM(amount) AS total FROM orders GROUP BY user_id
)
SELECT u.name, COALESCE(o.total, 0) AS total
FROM active_users u
LEFT JOIN order_totals o ON o.user_id = u.id;
```
CTE đệ quy dùng `WITH RECURSIVE` và cần điều kiện kết thúc cẩn thận để tránh vòng lặp vô hạn.

Tên bảng và cột nên dùng snake_case hay PascalCase?

Hầu hết quy ước CSDL ưa snake_case (`user_id`, `created_at`) vì mọi động cơ lớn đều chuyển định danh không trích dẫn về chữ thường hoặc chữ hoa nội bộ, khiến trộn chữ hoa thường mong manh. PostgreSQL chuyển về chữ thường; Oracle và DB2 chuyển về chữ hoa. Định danh PascalCase hay camelCase yêu cầu trích dẫn kép (`"UserId"`) để giữ chữ hoa, vốn dài dòng và dễ lỗi. snake_case là chuẩn de facto trong hệ sinh thái PostgreSQL, MySQL và SQLite. PascalCase phổ biến hơn trong SQL Server (T-SQL), nơi động cơ giữ chữ hoa trong metadata. ORM như Hibernate và Sequelize tự đổi (camelCase trong mã, snake_case trong DB) qua trình ánh xạ tên cột.

Có định dạng riêng cho BigQuery, Snowflake hay T-SQL không?

Có. Menu Phương ngữ hỗ trợ 15 ngữ pháp và mỗi loại thay đổi cách công cụ xử lý từ khóa, toán tử và trích dẫn. Chọn **bigquery** để xử lý định danh `project.dataset.table` trong dấu nháy ngược, cú pháp array/struct và hàm STANDARD SQL; **snowflake** cho toán tử ép kiểu `::`, truy cập đường dẫn bán cấu trúc `:` và FLATTEN; **tsql** cho định danh `[trong ngoặc vuông]`, TOP và `@biến` của SQL Server; **postgresql** cho placeholder `$1`, ép kiểu `::type` và chuỗi dollar-quote. Cũng hỗ trợ: MySQL, MariaDB, SQLite, Oracle PL/SQL, Redshift, DB2, Spark SQL, Trino/Presto, Hive và N1QL (Couchbase). Nếu chọn sai phương ngữ thì kết quả vẫn hợp lệ nhưng có thể không căn chỉnh cú pháp đặc thù động cơ một cách lý tưởng, nên hãy khớp menu với cơ sở dữ liệu đích để có kết quả gọn nhất.

Nén có giữ nguyên dữ liệu chuỗi của tôi không?

Có. Bộ nén dựa trên tokenizer: nó duyệt truy vấn và bỏ qua các literal trong dấu nháy đơn, nháy kép và nháy ngược cũng như chú thích `--` và `/* */`, chỉ co khoảng trắng và xóa chú thích TRONG các vùng code xung quanh. Điều đó nghĩa là giá trị như `'John Doe'` giữ nguyên hai khoảng trắng, `'50% -- off'` không bị cắt ở `--`, và `'a/*b*/c'` được giữ nguyên văn. Các bộ nén ngây thơ trước đây chạy thay thế `\s+` toàn cục sẽ âm thầm thay đổi ngữ nghĩa truy vấn — công cụ này thì không. Chạy Nén hoặc Định dạng và huy hiệu **Kiểm Tra An Toàn** phía trên kết quả cũng cho biết đã phân tích bao nhiêu câu lệnh, để bạn xác nhận công cụ đã đọc script đúng như mong đợi.

Công cụ nào định dạng SQL tự động?

Công cụ hàng đầu năm 2025: **sqlfluff** (Python, đa phương ngữ, có quan điểm, được dbt dùng) — phổ biến nhất, lint và sửa; **pg_format** (Perl, tập trung PostgreSQL, nhanh); **sql-formatter** (JavaScript, đa phương ngữ); **sqlfmt** (của Tylerb, dựa Go, có quan điểm như Black); **Poor SQL** (trực tuyến); và các plugin IDE cho VSCode (SQLTools), DataGrip và SQL Server Management Studio. Việc dbt áp dụng sqlfluff đã chuẩn hóa phong cách SQL trong cộng đồng phân tích. Tích hợp CI dễ dàng: `sqlfluff lint models/` và `sqlfluff fix --force models/` trong GitHub Actions hoặc GitLab CI trước khi merge. Cấu hình phương ngữ trong `.sqlfluff` để khớp CSDL của bạn (postgres, snowflake, bigquery, mysql, v.v.).

Tính năng chính

  • Định dạng SQL với thụt lề tùy chỉnh
  • Tùy chọn viết hoa từ khóa để dễ đọc hơn
  • Nén an toàn, giữ nguyên chuỗi và dấu chú thích bên trong dấu nháy
  • Kiểm Tra An Toàn phát hiện UPDATE/DELETE thiếu WHERE và TRUNCATE/DROP
  • Bộ đếm câu lệnh cho script nhiều truy vấn
  • Tô sáng cú pháp cho từ khóa, hàm, chuỗi, số
  • Thống kê thời gian thực
  • Hỗ trợ Copy/Download/Upload
  • Chế độ tối
  • 15 phương ngữ: MySQL, MariaDB, PostgreSQL, SQLite, T-SQL, Oracle PL/SQL, BigQuery, Snowflake, Redshift, DB2, Spark, Trino/Presto, Hive, N1QL
  • Xử lý 100% phía client - không thực thi SQL
  • Thân thiện mobile