SQL formatter nhận đoạn SQL dày đặc, viết trên một dòng hoặc được sinh tự động, rồi viết lại với thụt lề và xuống dòng nhất quán. Lập trình viên và chuyên viên phân tích dữ liệu dùng nó khi xem lại các phép join, gỡ lỗi bộ lọc, dọn dẹp SQL do ORM sinh ra, chia sẻ truy vấn trong ticket hay tài liệu, và khi đọc từng bước kế hoạch truy vấn.
Định dạng không thay đổi việc truy vấn *làm gì*, mà thay đổi việc con người đọc nó dễ đến đâu. Khi bố cục đã nhất quán, mối quan hệ giữa SELECT, FROM, JOIN, WHERE, GROUP BY, HAVING và ORDER BY dễ xem xét hơn nhiều, nhất là trong các truy vấn kết hợp truy vấn con và CTE.
SQL có nhiều *phương ngữ* (dialect): PostgreSQL, MySQL, SQLite, T-SQL (Microsoft SQL Server), Oracle và BigQuery đều mở rộng tiêu chuẩn bằng cú pháp riêng. Một formatter tốt hiểu phương ngữ bạn chọn để không làm hỏng cú pháp đặc thù của từng hệ quản trị.
Bạn sẽ học được gì khi định dạng SQL
Mỗi mệnh đề SQL có vai trò riêng: SELECT chọn cột, FROM chọn bảng, WHERE lọc hàng, GROUP BY gom nhóm để tổng hợp và ORDER BY sắp xếp.
Thụt lề dễ đọc làm lộ ra các truy vấn lồng nhau, phép join và điều kiện vốn bị che khuất trong một truy vấn viết trên một dòng.
Phương ngữ rất quan trọng: RETURNING, LIMIT, TOP và tên định danh trong ngoặc vuông ([col] so với "col") không dùng chung được giữa các cơ sở dữ liệu.
Với các formatter được viết tốt, chú thích vẫn còn nguyên sau khi định dạng, nên bạn có thể giải thích *vì sao* có một bộ lọc ngay cạnh nó.
Cách định dạng câu truy vấn SQL từng bước
1
Dán câu truy vấn
Đưa SQL vào ô đầu vào. SQL viết trên một dòng, do ORM sinh ra hay mới định dạng một phần đều dùng được.
2
Chọn phương ngữ
Chọn PostgreSQL, MySQL, SQLite hoặc T-SQL để formatter tôn trọng các từ khóa đặc thù như LIMIT, TOP hay RETURNING.
3
Thiết lập phong cách
Chọn kiểu chữ cho từ khóa (viết hoa là chuẩn phổ biến) và độ rộng thụt lề (2 hoặc 4 dấu cách). Phần lớn các nhóm chọn từ khóa viết hoa và thụt lề 2 dấu cách.
4
Đọc kết quả đã định dạng
Mỗi mệnh đề nằm trên một dòng riêng, các phép join được căn thẳng hàng và truy vấn con được thụt lề. Chú thích được giữ nguyên.
5
Sao chép lại vào dự án
Dán truy vấn đã định dạng vào migration, truy vấn raw của ORM hoặc công cụ BI. Mọi thứ đều ở lại trong trình duyệt của bạn.
Tra cứu nhanh các mệnh đề SQL
Các mệnh đề bạn sẽ gặp trong 95% truy vấn SELECT, theo thứ tự chúng được xử lý về mặt khái niệm. Tài liệu chính thức: PostgreSQL SELECT, MySQL SELECT.
Mệnh đề
Mục đích
Ví dụ
SELECT
Chọn các cột hoặc biểu thức cần trả về
SELECT id, name
FROM
Chọn bảng nguồn
FROM users
JOIN ... ON
Kết hợp các hàng từ một bảng khác
JOIN orders ON orders.user_id = users.id
WHERE
Lọc hàng trước khi gom nhóm
WHERE active = true
GROUP BY
Gom các hàng có cùng giá trị để tổng hợp
GROUP BY country
HAVING
Lọc các nhóm đã tổng hợp
HAVING COUNT(*) > 10
ORDER BY
Sắp xếp tập kết quả
ORDER BY created_at DESC
LIMIT / OFFSET
Phân trang kết quả
LIMIT 20 OFFSET 40
WITH ... AS
Common Table Expression (CTE): đặt tên cho một truy vấn con
WITH active AS (...)
Ví dụ SQL để thử
Định dạng một truy vấn đơn giản
Đầu vào
select id,name from users where active=trueorderby created_at desclimit10
Đã định dạng
SELECT id, nameFROM usersWHERE active =trueORDERBY created_at DESCLIMIT10;
Giờ mỗi mệnh đề nằm trên một dòng riêng và danh sách cột được thụt lề. Xem lại truy vấn này khi review code dễ hơn gấp 10 lần.
Xem xét một phép join
Đầu vào
select u.name,o.total from users u join orders o on o.user_id=u.id where o.total>100
Đã định dạng
SELECT u.name, o.totalFROM users uJOIN orders o ON o.user_id = u.idWHERE o.total >100;
Đặt bí danh cho bảng (users u, orders o) giúp danh sách cột ngắn gọn. Dòng JOIN ... ON thể hiện rõ mối quan hệ giữa các bảng.
Đọc một truy vấn con lồng nhau
Đầu vào
select*from users where id in(select user_id from enrollments where course_id=5)
Đã định dạng
SELECT*FROM usersWHERE id IN(SELECT user_idFROM enrollmentsWHERE course_id =5);
Thụt lề truy vấn bên trong cho thấy rõ sự phụ thuộc. Khi đã nhìn thấy cấu trúc, nhiều truy vấn con có thể được viết lại thành JOIN hoặc CTE.
Các ORM như Prisma, Django và ActiveRecord ghi log SQL thành một dòng dài. Công cụ làm đẹp tách nó thành từng mệnh đề và thụt lề chuỗi điều kiện WHERE, để bạn thật sự đọc được truy vấn làm gì trước khi dán vào ticket.
Những lỗi thường gặp khi định dạng SQL
Nghĩ rằng SQL đã định dạng là SQL *đúng*. Định dạng chỉ thay đổi bố cục, không thay đổi ngữ nghĩa: một truy vấn trông gọn gàng vẫn có thể trả về kết quả sai.
Sửa truy vấn trong lúc định dạng rồi quên chạy thử lại kết quả.
Bỏ qua phương ngữ: LIMIT 10 trong PostgreSQL, TOP 10 trong T-SQL và FETCH FIRST 10 ROWS ONLY trong SQL chuẩn đều làm cùng một việc.
Trộn nhiều kiểu chữ cho từ khóa (Select, SELECT, select) trong cùng một dự án. Hãy chọn một phong cách và giữ nhất quán; phần lớn các nhóm dùng từ khóa viết hoa.
Câu hỏi thường gặp về SQL formatter
Định dạng SQL có làm thay đổi kết quả truy vấn không?
Không. Định dạng chỉ thay đổi khoảng trắng và kiểu chữ. Cơ sở dữ liệu phân tích cả hai phiên bản thành cùng một kế hoạch truy vấn, nên các hàng kết quả giống hệt nhau.
Vì sao nên định dạng SQL?
SQL dễ đọc thì dễ gỡ lỗi, review, giảng dạy và bảo trì hơn, nhất là khi truy vấn có nhiều phép join, truy vấn con, CTE hoặc window function.
Phương ngữ SQL là gì?
Phương ngữ SQL là phần mở rộng riêng của từng cơ sở dữ liệu so với SQL chuẩn. PostgreSQL, MySQL, SQLite, T-SQL (SQL Server), Oracle và BigQuery đều có cú pháp riêng ngoài tiêu chuẩn SQL.
SQL formatter có sửa được truy vấn bị lỗi không?
Formatter có thể làm lộ ra lỗi cú pháp khi xuất lại truy vấn ở dạng có cấu trúc, nhưng nó không hiểu schema của bạn và không đảm bảo truy vấn đúng về mặt logic.
Có nên viết hoa từ khóa SQL không?
Phần lớn hướng dẫn phong cách khuyên viết hoa từ khóa (SELECT, FROM, WHERE) và viết thường tên định danh, vì độ tương phản thị giác giúp cấu trúc truy vấn nổi bật. Hãy chọn một phong cách và giữ nhất quán.
SQL formatter và SQL beautifier khác nhau thế nào?
Đó là hai cái tên cho cùng một thứ. "Beautify" và "format" đều có nghĩa là viết lại truy vấn với thụt lề, xuống dòng và kiểu chữ từ khóa nhất quán để dễ đọc hơn. Dù bạn tìm SQL beautifier, SQL pretty printer hay SQL formatter, công cụ này đều làm được: dán truy vấn, chọn phương ngữ và sao chép phiên bản gọn gàng.
Làm sao định dạng câu truy vấn SQL online miễn phí?
Dán truy vấn vào ô đầu vào, chọn phương ngữ (PostgreSQL, MySQL, SQLite hoặc T-SQL), và formatter thụt lề lại ngay lập tức với mỗi mệnh đề trên một dòng riêng. Công cụ hoàn toàn miễn phí, không cần đăng ký, và mọi thứ chạy trong trình duyệt: SQL của bạn không bao giờ được tải lên, nên an toàn cho cả truy vấn nội bộ hay truy vấn production.