Menu

Định dạng SQL

Làm đẹp truy vấn SQL với thụt lề theo cú pháp.

Tác giả Nethanel Bar, Co-founder & CEO

Cập nhật lần cuối

Sẵn sàng học code thật sự?

Coddy dạy bạn bằng cách viết code thật ngay trên trình duyệt: bài học tương tác, phản hồi tức thì và AI hỗ trợ khi bạn bị kẹt.

SQL formatter là gì?

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 đíchVí dụ
SELECTChọn các cột hoặc biểu thức cần trả vềSELECT id, name
FROMChọn bảng nguồnFROM users
JOIN ... ONKết hợp các hàng từ một bảng khácJOIN orders ON orders.user_id = users.id
WHERELọc hàng trước khi gom nhómWHERE active = true
GROUP BYGom các hàng có cùng giá trị để tổng hợpGROUP BY country
HAVINGLọc các nhóm đã tổng hợpHAVING COUNT(*) > 10
ORDER BYSắp xếp tập kết quảORDER BY created_at DESC
LIMIT / OFFSETPhân trang kết quảLIMIT 20 OFFSET 40
WITH ... ASCommon Table Expression (CTE): đặt tên cho một truy vấn conWITH 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=true order by created_at desc limit 10
Đã định dạng
SELECT  id,  nameFROM usersWHERE active = trueORDER BY created_at DESCLIMIT 10;

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_id  FROM enrollments  WHERE 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.

Làm đẹp SQL rút gọn do ORM sinh ra

Đầu vào
SELECT "posts"."id", "posts"."title", "users"."name" FROM "posts" INNER JOIN "users" ON "users"."id" = "posts"."author_id" WHERE "posts"."published" = true AND "posts"."created_at" > '2026-01-01' ORDER BY "posts"."created_at" DESC LIMIT 25
Đã làm đẹp
SELECT  "posts"."id",  "posts"."title",  "users"."name"FROM "posts"INNER JOIN "users" ON "users"."id" = "posts"."author_id"WHERE "posts"."published" = true  AND "posts"."created_at" > '2026-01-01'ORDER BY "posts"."created_at" DESCLIMIT 25;

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.

Tìm hiểu thêm

Công cụ lập trình khác

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu