Đây là một câu SQL thực tế từ một hệ thống production mà tôi từng thấy:
select u.id,u.name,u.email,o.total,o.created_at from users u inner join orders o on u.id=o.user_id where o.status='completed' and o.created_at between '2024-01-01' and '2024-12-31' order by o.total desc limit 100Chạy được? Hoàn toàn. Đọc được? Tùy người. Maintain được sau 3 tháng? Chúc may mắn. Chỉ cần một cái click, tool này biến đoạn đó thành:
SELECT u.id, u.name, u.email, o.total, o.created_at FROM users u INNER JOIN orders o ON u.id = o.user_id WHERE o.status = 'completed' AND o.created_at BETWEEN '2024-01-01' AND '2024-12-31' ORDER BY o.total DESC LIMIT 100Cùng một câu query, khác hoàn toàn về độ dễ đọc. Đó là SQL Formatter.
SQL formatter là gì và tại sao cần dùng?
SQL Formatter là tool tự động định dạng lại câu lệnh SQL theo chuẩn nhất định: viết hoa keyword, thêm xuống dòng và indent đúng chỗ, căn lề các mệnh đề cho đồng đều. Kết quả là code SQL dễ đọc, dễ review và dễ bảo trì hơn rất nhiều.
Trong thực tế, SQL xấu xuất hiện ở khắp nơi: query được sinh tự động bởi ORM, câu lệnh copy từ log database, đoạn SQL viết vội lúc debug, hay stored procedure được viết từ nhiều năm trước mà không ai dám đụng vào. Format lại là bước đầu tiên trước khi đọc hiểu và tối ưu.
Tính năng của tool
| Tính năng | Mô tả |
|---|---|
| Format / Beautify | Định dạng SQL thô thành dạng dễ đọc với keyword viết hoa, xuống dòng và indent chuẩn |
| Minify | Nén SQL về một dòng, loại bỏ khoảng trắng thừa — hữu ích khi nhúng SQL vào code hoặc config |
| Hỗ trợ nhiều dialect | MySQL, PostgreSQL, SQL Server (T-SQL), Oracle, SQLite, MariaDB — mỗi dialect có cú pháp riêng |
| Highlight cú pháp | Tô màu keyword, string, số, comment giúp phân biệt các thành phần của câu query |
| Tùy chỉnh indent | Chọn số space cho mỗi cấp indent (thường là 2 hoặc 4) |
Cách sử dụng
- Bước 1: Dán câu lệnh SQL cần format vào ô nhập liệu — có thể là một câu đơn giản hoặc cả một stored procedure dài.
- Bước 2: Chọn dialect phù hợp: MySQL, PostgreSQL, SQL Server… (nếu không chắc, chọn Standard SQL).
- Bước 3: Nhấn Format — kết quả hiện ra ngay lập tức.
- Bước 4: Nhấn Copy để copy vào clipboard hoặc dùng trực tiếp trong editor của bạn.
Ví dụ trước và sau khi format
Trước (SQL thô, khó đọc):
select p.name,p.price,c.name as category,count(oi.id) as total_sold from products p left join categories c on p.category_id=c.id left join order_items oi on p.id=oi.product_id where p.is_active=1 group by p.id,p.name,p.price,c.name having count(oi.id)>10 order by total_sold descSau khi format:
SELECT p.name, p.price, c.name AS category, COUNT(oi.id) AS total_sold FROM products p LEFT JOIN categories c ON p.category_id = c.id LEFT JOIN order_items oi ON p.id = oi.product_id WHERE p.is_active = 1 GROUP BY p.id, p.name, p.price, c.name HAVING COUNT(oi.id) > 10 ORDER BY total_sold DESCSự khác biệt giữa các SQL dialect
Các hệ quản trị cơ sở dữ liệu khác nhau có những cú pháp đặc thù riêng. Chọn đúng dialect giúp tool format chính xác hơn:
| Dialect | Đặc điểm nổi bật | Dùng cho |
|---|---|---|
| MySQL / MariaDB | Dùng backtick (`) cho tên bảng/cột, LIMIT để phân trang | Hầu hết web app, WordPress, Laravel |
| PostgreSQL | Dùng nháy kép cho identifier, nhiều kiểu dữ liệu phong phú, hỗ trợ JSON native | Ứng dụng enterprise, data analytics |
| SQL Server (T-SQL) | Dùng [] cho tên bảng/cột, TOP thay vì LIMIT, có GO batch separator | Hệ thống Microsoft, .NET apps |
| Oracle | Dùng ROWNUM để giới hạn kết quả (trước 12c), cú pháp outer join đặc thù | Hệ thống ngân hàng, enterprise lớn |
| SQLite | Cú pháp đơn giản, ít tính năng hơn, không có stored procedure | Ứng dụng mobile, embedded, prototype |
Ai cần tool này nhất?
- Backend developer: Format query trước khi paste vào code review, đảm bảo SQL trong codebase nhất quán và dễ đọc.
- DBA (Database Administrator): Đọc và tối ưu stored procedure, view, trigger được viết từ lâu mà không có format chuẩn.
- Data Analyst / BI Developer: Format query phức tạp nhiều JOIN, CTE, subquery trước khi chia sẻ với đồng nghiệp.
- QA / Tester: Đọc hiểu SQL từ log database để debug kết quả test không như mong đợi.
- Người mới học SQL: Xem SQL được format chuẩn để học cách viết đúng cấu trúc từ đầu.
Best practices khi viết SQL dễ đọc
| Quy tắc | Ví dụ |
|---|---|
| Viết hoa toàn bộ SQL keyword | SELECT, FROM, WHERE, JOIN — không phải select, from |
| Mỗi mệnh đề chính trên một dòng riêng | SELECT, FROM, WHERE, ORDER BY mỗi cái một dòng |
| Indent các điều kiện phụ | Các điều kiện AND, OR trong WHERE thụt vào 2-4 space |
| Đặt alias có nghĩa | users u, orders o thay vì users a, orders b |
| Comment cho query phức tạp | Dùng -- comment hoặc /* block comment */ giải thích logic |
Kết luận
SQL format đúng không làm code chạy nhanh hơn — nhưng nó giúp bạn (và đồng nghiệp) đọc hiểu nhanh hơn, debug dễ hơn, và ít mắc lỗi logic hơn. Với các dự án dài hơi, đó là sự khác biệt giữa codebase lành mạnh và codebase mà không ai muốn đụng vào.
Bookmark tool này để dùng mỗi khi cần format SQL. Khám phá thêm các tool hữu ích khác tại codetuthub.com/tools.
0 Bình luận