Định dạng SQL

Làm đẹp và định dạng truy vấn SQL. Nhiều phương ngữ. Miễn phí mãi mãi.
Phương ngữ SQL
SQL đầu vào
SQL đã định dạng
SQL đầu vào

Riêng tư và an toàn

Mọi thứ xảy ra trong trình duyệt của bạn. Các tệp của bạn không bao giờ chạm vào máy chủ của chúng tôi.

Nhanh như chớp

Không tải lên, không chờ đợi. Chuyển đổi ngay khi bạn thả một tệp.

Thực sự miễn phí

Không cần tài khoản. Không có chi phí ẩn. Không có thủ thuật kích thước tệp.

SQL (Structured Query Language) là ngôn ngữ chung được hầu hết mọi cơ sở dữ liệu quan hệ nghiêm túc trên hành tinh sử dụng—từ PostgreSQL, MySQL SQLite đến các hệ thống thương mại như SQL Server và Oracle. Nó cho phép bạn định nghĩa cấu trúc dữ liệu, lưu trữ dữ liệu, truy vấn hiệu quả và thực thi các quy tắc về cách dữ liệu đó hoạt động.

Dưới đây là một chuyến tham quan sâu về SQL khoảng 2.500 từ: nó là gì, cách hoạt động và cách sử dụng tốt trong các hệ thống thực tế.

1. SQL là gì (và tại sao nó vẫn quan trọng)

SQL là ngôn ngữ khai báo: bạn mô tả cái gì dữ liệu bạn muốn, và cơ sở dữ liệu quyết định cách lấy nó. Các hướng dẫn như hướng dẫn SQL trên W3Schools loạt bài W3Schools.in SQL giới thiệu SQL như một ngôn ngữ tiêu chuẩn để lưu trữ, thao tác và truy xuất dữ liệu trên nhiều công cụ cơ sở dữ liệu.

Vì SQL được chuẩn hóa và hỗ trợ rộng rãi, bạn có thể áp dụng cùng một mô hình tinh thần trên:

  • ứng dụng web trên MySQL hoặc PostgreSQL
  • ứng dụng nhúng sử dụng SQLite
  • hệ thống doanh nghiệp như SQL Server hoặc Oracle

Hầu hết dữ liệu kinh doanh hàng ngày—đơn hàng, người dùng, thanh toán, nhật ký, phân tích—cuối cùng được lưu trữ trong các bảng mà bạn có thể truy vấn bằng SQL.

2. Tiêu chuẩn SQL và phương ngữ

SQL được chuẩn hóa bởi họ tiêu chuẩn ISO/IEC 9075 , định nghĩa ngôn ngữ cốt lõi và nhiều phần mở rộng tùy chọn. Tiêu chuẩn đã phát triển qua các phiên bản như SQL-86, SQL-92, SQL:1999, SQL:2003 và lên đến SQL:2023. Các bài viết như tổng quan của ANSI về tiêu chuẩn SQL ISO/IEC 9075:2023 giải thích cách các tiêu chuẩn ANSI và ISO liên kết theo thời gian.

Bản thân tiêu chuẩn được chia thành nhiều phần, chẳng hạn như:

  • Phần 1 (Framework)Phần 2 (Foundation)
  • Phần 3 (Call-Level Interface) cho API
  • Phần 4 (Persistent Stored Modules) cho stored procedures
  • Các phần sau như SQL/XML, SQL/MED và thậm chí SQL/PGQ cho property graph queries

Bạn có thể xem danh sách đầy đủ trên trang catalog ISO cho SQL và trên các tài nguyên như phân tích các phần tiêu chuẩn của Modern SQL.

Trong thực tế, mỗi cơ sở dữ liệu triển khai phương ngữ riêng:

  • PostgreSQL thêm các phần mở rộng như kiểu dữ liệu nâng cao và tìm kiếm toàn văn, được tài liệu hóa trong hướng dẫn PostgreSQL.
  • MySQL có phong cách riêng cho câu lệnh SQL hàm.
  • SQLite hỗ trợ một tập con đáng kể của SQL với một số hành vi độc đáo, được chi tiết trong tài liệu SELECT.

Các khái niệm cốt lõi—bảng, hàng, cột, kết nối, tổng hợp—có thể di chuyển được, nhưng bất kỳ hệ thống không tầm thường nào sẽ liên quan đến việc học các đặc điểm và tính năng của một phương ngữ cụ thể.

3. Cơ bản về quan hệ: Bảng, Hàng, Khóa

Ở cốt lõi, SQL được thiết kế xung quanh mô hình quan hệ: dữ liệu sống trong bảng (quan hệ), nơi mỗi hàng đại diện cho một sự kiện và mỗi cột mô tả một thuộc tính.

Các phần tử điển hình bao gồm:

  • Bảng: ví dụ: customers, orders
  • Cột: ví dụ: id, name, order_date, total_amount
  • Khóa chính: định danh duy nhất cho mỗi hàng (thường là id)
  • Khóa ngoại: một cột tham chiếu đến khóa chính của bảng khác (ví dụ: orders.customer_id customers.id)

Các hướng dẫn chuẩn hóa—như hướng dẫn DigitalOcean về chuẩn hóa hoặc giải thích của freeCodeCamp về 1NF, 2NF, 3NF—định khung thiết kế quan hệ tốt như giảm thiểu dư thừa và ngăn chặn các bất thường cập nhật bằng cách chia dữ liệu thành các bảng có cấu trúc tốt và liên kết chúng với các khóa.

Khi bạn truy vấn bằng SQL, về cơ bản bạn đang hỏi cơ sở dữ liệu: "Từ các bảng này, trong các điều kiện này, tôi nên thấy những hàng và cột nào?"

4. Truy vấn cốt lõi: SELECT

Câu lệnh SELECT là công cụ chính của SQL và có thể là lệnh phức tạp nhất của nó. Tham chiếu SQLite SELECT gọi nó là "lệnh phức tạp nhất trong ngôn ngữ SQL", và cả tài liệu MySQL SELECT và các hướng dẫn như hướng dẫn SELECT của SQLite Tutorial đi qua nhiều tùy chọn của nó.

SELECT id, name
FROM customers;

Các phần chính:

  • SELECT liệt kê các cột (hoặc * cho tất cả các cột, mặc dù thường tốt hơn là rõ ràng).
  • FROM chọn một hoặc nhiều bảng.
  • WHERE lọc các hàng.
  • ORDER BY sắp xếp kết quả.
  • LIMIT giới hạn số hàng bạn thấy.
SELECT id, name, created_at
FROM customers
WHERE active = TRUE
ORDER BY created_at DESC
LIMIT 50;

Các hướng dẫn giới thiệu như hướng dẫn SQL của W3Schools tổng quan W3Schools MySQL về các lệnh chung sử dụng SELECT để cho thấy cách bạn trích xuất dữ liệu từ các bảng trong một biểu thức duy nhất, dễ đọc.

5. Lọc, Sắp xếp và Biểu thức

SQL tỏa sáng khi bạn kết hợp lọc và biểu thức trực tiếp trong truy vấn:

SELECT
  id,
  total_amount,
  total_amount * 0.1 AS tax_estimate
FROM orders
WHERE status = 'paid'
  AND total_amount >= 100
ORDER BY total_amount DESC;

Mệnh đề WHERE có thể sử dụng các toán tử so sánh (=, <>, >, <), toán tử logic (AND, OR, NOT), khớp mẫu (LIKE, ILIKE) và hơn thế nữa. Các cơ sở dữ liệu như MySQL tài liệu một bộ phong phú hàm và toán tử tích hợp cho số, chuỗi, ngày/giờ, JSON và các thao tác khác.

Bạn cũng có thể:

  • sử dụng IN để khớp với một danh sách: WHERE status IN ('paid', 'refunded')
  • sử dụng BETWEEN cho phạm vi: WHERE created_at BETWEEN '2025-01-01' AND '2025-01-31'
  • sử dụng IS NULL / IS NOT NULL để xử lý các giá trị thiếu

Các hướng dẫn và sổ tay tốt nhấn mạnh rằng biểu thức xuất hiện trong nhiều mệnh đề—WHERE, ORDER BY, HAVING và thậm chí trong chính SELECT. Tài liệu MySQL làm nổi bật điều này trong phần của họ về đánh giá biểu thức trong chương hàm và toán tử.

6. Kết nối các bảng

Cơ sở dữ liệu thực tế hiếm khi giữ mọi thứ trong một bảng duy nhất. Thay vào đó, bạn chuẩn hóa dữ liệu thành nhiều bảng và kết nối chúng khi bạn truy vấn. Các kết nối được bao phủ rộng rãi trong các tài nguyên như trang W3Schools về kết nối SQL, hướng dẫn kết nối của GeeksforGeeks, tổng quan kết nối của TutorialsPointvà các hướng dẫn tương tác như hướng dẫn kết nối SQL trên SQL Practice Online.

SELECT
  o.id,
  c.name,
  o.order_date,
  o.total_amount
FROM orders AS o
JOIN customers AS c
  ON c.id = o.customer_id;

Các loại kết nối phổ biến:

  • INNER JOIN – chỉ các hàng có khớp trong cả hai bảng
  • LEFT JOIN – tất cả các hàng từ bảng bên trái, cộng với các khớp từ bên phải
  • RIGHT JOIN – ngược lại với left join (không được hỗ trợ trong một số công cụ như SQLite)
  • FULL OUTER JOIN – các hàng từ cả hai bên, ngay cả khi không khớp

Các giải thích trực quan và nặng về mã, chẳng hạn như bài viết "SQL joins được giải thích" của DbSchema hoặc ví dụ kết nối của LearnSQL.com, là những cách tuyệt vời để xây dựng trực giác mạnh mẽ về cách các kết nối hoạt động.

7. Tổng hợp, Nhóm và Hàm cửa sổ

Để tóm tắt dữ liệu—tổng, trung bình, đếm—bạn sử dụng hàm tổng hợp (COUNT, SUM, AVG, MIN, MAX) với GROUP BY:

SELECT
  customer_id,
  COUNT(*) AS order_count,
  SUM(total_amount) AS total_spent
FROM orders
WHERE status = 'paid'
GROUP BY customer_id
HAVING SUM(total_amount) >= 1000
ORDER BY total_spent DESC;

Các tham chiếu như chương hàm và toán tử của MySQL tài liệu PostgreSQL về hàm tổng hợp và cửa sổ liệt kê các hàm tích hợp bạn có thể sử dụng trong các biểu thức này.

SQL hiện đại cũng hỗ trợ hàm cửa sổ, cho phép bạn tính toán tổng hợp trên các "cửa sổ" hàng trượt trong khi vẫn trả về các hàng riêng lẻ—ví dụ: tổng chạy hoặc xếp hạng. Hàm cửa sổ đi vào SQL thông qua các sửa đổi cho SQL:1999, sau đó được tích hợp vào SQL:2003, như được tóm tắt trong các ghi chú về tiêu chuẩn SQL:1999 và SQL:2003.

SELECT
  customer_id,
  order_date,
  total_amount,
  SUM(total_amount) OVER (
    PARTITION BY customer_id
    ORDER BY order_date
  ) AS running_total
FROM orders;

Loại truy vấn này cực kỳ mạnh mẽ cho phân tích trực tiếp trong cơ sở dữ liệu.

8. Định nghĩa dữ liệu: Tạo và phát triển lược đồ

SQL không chỉ để truy vấn; nó cũng định nghĩa hình dạng của dữ liệu của bạn thông qua các câu lệnh Data Definition Language (DDL), được tài liệu hóa tốt trong các phần như hướng dẫn Định nghĩa Dữ liệu của PostgreSQL chương câu lệnh SQL của MySQL.

Các lệnh DDL phổ biến:

  • CREATE DATABASE my_app; – tạo cơ sở dữ liệu
  • CREATE TABLE customers (...); – định nghĩa bảng
  • ALTER TABLE customers ADD COLUMN phone TEXT; – thay đổi cấu trúc bảng
  • DROP TABLE customers; – xóa bảng
CREATE TABLE customers (
  id           SERIAL PRIMARY KEY,
  email        VARCHAR(255) UNIQUE NOT NULL,
  name         TEXT NOT NULL,
  created_at   TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  active       BOOLEAN NOT NULL DEFAULT TRUE
);

Những điểm cần lưu ý:

  • Kiểu dữ liệu: số nguyên, chuỗi, ngày tháng, boolean, JSON, v.v.
  • Ràng buộc: PRIMARY KEY, UNIQUE, NOT NULL, biểu thức CHECK
  • Giá trị mặc định và cột được tạo

Mọi sổ tay RDBMS chính—phần ngôn ngữ SQL của PostgreSQL, sổ tay tham khảo MySQL tham chiếu ngôn ngữ SQLite—nhấn mạnh suy nghĩ cẩn thận về DDL, vì các quyết định lược đồ khó thay đổi sau này.

9. Giao dịch, Đồng thời và Ràng buộc

Cơ sở dữ liệu SQL thường triển khai các thuộc tính ACID— Atomicity, Consistency, Isolation, Durability—thông qua giao dịch:

BEGIN;

UPDATE accounts
SET balance = balance - 200
WHERE id = 1;

UPDATE accounts
SET balance = balance + 200
WHERE id = 2;

COMMIT;

Nếu bất cứ điều gì thất bại giữa BEGINCOMMIT, giao dịch có thể được hoàn nguyên để các thay đổi trung gian không rò rỉ vào cơ sở dữ liệu.

Phần của MySQL về câu lệnh giao dịch và khóa bao gồm START TRANSACTION, COMMIT, ROLLBACK và các điểm lưu, trong khi các chương của PostgreSQL về kiểm soát đồng thời quản lý giao dịch giải thích cách các mức cô lập và MVCC hoạt động dưới mui xe.

Ràng buộc—như khóa ngoại hoặc ràng buộc kiểm tra—là cách của cơ sở dữ liệu thực thi các quy tắc kinh doanh:

ALTER TABLE orders
ADD CONSTRAINT fk_orders_customer
FOREIGN KEY (customer_id)
REFERENCES customers (id);

Khi được sử dụng tốt, chúng biến cơ sở dữ liệu của bạn thành người bảo vệ các bất biến, ngăn chặn dữ liệu không hợp lệ tại nguồn thay vì chỉ dựa vào logic ứng dụng.

10. Thiết kế lược đồ và Chuẩn hóa

Có được lược đồ đúng thường quan trọng hơn các truy vấn thông minh. Chuẩn hóa là quá trình cấu trúc các bảng để giảm dư thừa và cải thiện tính nhất quán. Các hướng dẫn như:

Tiến trình điển hình:

  • 1NF: không có nhóm lặp lại; mỗi cột chứa các giá trị nguyên tử.
  • 2NF: mỗi thuộc tính không phải khóa phụ thuộc vào toàn bộ khóa chính (cho khóa tổng hợp).
  • 3NF: không có phụ thuộc bắc cầu (các thuộc tính không phải khóa không phụ thuộc vào các thuộc tính không phải khóa khác).

Chuẩn hóa quá mức có thể làm tổn hại hiệu suất và làm phức tạp các truy vấn; các nhóm thực tế thường chuẩn hóa đến 3NF và sau đó phi chuẩn hóa có chọn lọc (ví dụ: lưu vào bộ nhớ cache các tổng hợp) ở những nơi hiệu suất yêu cầu.

11. Chỉ mục và Hiệu suất truy vấn

Chỉ mục là công cụ chính để làm cho các truy vấn SQL nhanh. Chúng là các cấu trúc dữ liệu phụ trợ cho phép cơ sở dữ liệu nhảy thẳng đến các hàng liên quan thay vì quét toàn bộ bảng.

Một tài nguyên được tôn trọng sâu sắc về lập chỉ mục là Use The Index, Luke! của Markus Winand, một cuốn sách trực tuyến miễn phí tập trung hoàn toàn vào hiệu suất SQL và chiến lược lập chỉ mục. Trang chính của trang web, UseTheIndexLuke.com, và các bài viết như "Điều chỉnh hiệu suất lập chỉ mục LIKE filters" "Nhiều chỉ mục hơn, INSERT chậm hơn" giải thích khi nào chỉ mục giúp và khi nào chúng gây hại.

Các ý tưởng chính:

  • Chỉ mục B-tree tăng tốc tìm kiếm bằng nhau và phạm vi (WHERE email = ..., WHERE created_at >= ...).
  • Chỉ mục tổng hợp xem xét thứ tự cột—ví dụ: (customer_id, created_at) hoạt động tốt cho WHERE customer_id = ? AND created_at >= ?.
  • Chỉ mục giúp SELECT, UPDATE DELETE với bộ lọc, nhưng làm chậm chèn vì mỗi lần chèn phải cập nhật tất cả các chỉ mục liên quan.

Các hướng dẫn như bài viết MSSQLTips về thiết kế chỉ mục SQL Server chứng minh cách lựa chọn cột và thứ tự trong chỉ mục ảnh hưởng đến các truy vấn thực tế.

Các quy tắc thực tế:

  • Lập chỉ mục các khóa chính và cột kết nối/lọc thường xuyên của bạn.
  • Tránh lập chỉ mục mọi cột—quá nhiều chỉ mục giết chết hiệu suất ghi.
  • Sử dụng EXPLAIN/EXPLAIN ANALYZE của cơ sở dữ liệu để xem cách các truy vấn được thực thi.

12. Tính năng SQL hiện đại: CTE, JSON và hơn thế nữa

Trong khi các nguyên tắc cơ bản vẫn ổn định, SQL hiện đại đã phát triển đáng kể:

  • Common Table Expressions (CTE) thông qua WITH cho phép các truy vấn dễ đọc hơn, mô-đun hơn:
    WITH recent_orders AS (
      SELECT *
      FROM orders
      WHERE order_date >= CURRENT_DATE - INTERVAL '7 days'
    )
    SELECT customer_id, COUNT(*) 
    FROM recent_orders
    GROUP BY customer_id;
  • Hỗ trợ JSON cho phép bạn trộn dữ liệu bán cấu trúc với các bảng quan hệ. PostgreSQL, MySQL và các hệ thống khác tài liệu các hàm JSON rộng rãi trong hướng dẫn của chúng, chẳng hạn như các tính năng JSON của MySQL được liệt kê trong hàm JSON.
  • Kiểu dữ liệu nâng cao (mảng, hstore, hình học, tìm kiếm toàn văn) được mô tả trong các chương kiểu dữ liệu và chỉ mục của PostgreSQL trong suốt hướng dẫn PostgreSQL.

Bản thân tiêu chuẩn SQL đã thêm các phần cho XML, mảng đa chiều và các truy vấn property graph, như được tài liệu trong catalog tiêu chuẩn SQL ISO và trong các bài viết về sự tiến hóa của SQL như bài viết tiêu chuẩn SQL ANSI.

SQL hiện đại đủ mạnh để nhiều ứng dụng có thể đẩy logic phức tạp —phân cấp, phân tích, xử lý sự kiện—xuống lớp cơ sở dữ liệu.

13. Học SQL hiệu quả

Vì SQL vẫn là nền tảng cho công việc dữ liệu, có một hệ sinh thái phong phú về tài nguyên học tập:

Chiến lược học tập thực tế:

  1. Thành thạo SELECT và lọc cơ bản. Bắt đầu với các truy vấn đơn giản và dần dần thêm lớp WHERE, ORDER BYLIMIT.
  2. Làm quen với kết nối. Thực hành tất cả các loại kết nối cho đến khi bạn có thể dự đoán kết quả một cách tự tin.
  3. Thêm nhóm và tổng hợp. Học cách trả lời các câu hỏi như "doanh thu mỗi tháng" hoặc "10 khách hàng hàng đầu" với GROUP BY.
  4. Học thiết kế lược đồ. Nghiên cứu chuẩn hóa và thực hành mô hình hóa các hệ thống thực tế—ví dụ: cửa hàng, hệ thống đặt chỗ, mạng xã hội.
  5. Khám phá các tính năng của công cụ yêu thích của bạn. Đọc tài liệu chính thức của cơ sở dữ liệu của bạn—phần ngôn ngữ SQL của PostgreSQL, sổ tay tham khảo MySQLhoặc tham chiếu ngôn ngữ SQLite—để khám phá các công cụ cụ thể cho công cụ.
  6. Cuối cùng, học hiệu suất. Thử nghiệm với các chỉ mục bằng cách sử dụng các khái niệm từ Use The Index, Luke! và các tài nguyên tương tự, và tạo hồ sơ các truy vấn với EXPLAIN.

Nếu bạn có thể đọc và viết SQL một cách thoải mái, bạn có thể kiểm tra dữ liệu trực tiếp trong sản xuất, xây dựng báo cáo mà không cần xuất sang bảng tính, gỡ lỗi logic ứng dụng bằng cách xem các bảng cơ bản và cộng tác hiệu quả hơn với các kỹ sư và nhà phân tích.

14. Bức tranh lớn

SQL nằm ở một giao lộ độc đáo: nó hơn 40 tuổi, nhưng vẫn liên quan sâu sắc trong các hệ thống cloud-native, tập trung vào phân tích ngày nay. Tiêu chuẩn ISO/IEC 9075 và nhiều phần của nó tiếp tục phát triển, trong khi các cơ sở dữ liệu mã nguồn mở như PostgreSQL, MySQL SQLite thúc đẩy các tính năng thực tế và cải thiện hiệu suất.

Nếu bạn làm việc với dữ liệu—nhà phát triển, nhà phân tích, nhà khoa học dữ liệu hoặc người quản lý sản phẩm—SQL là ngôn ngữ chung cho phép bạn đặt câu hỏi trực tiếp cho cơ sở dữ liệu. Đáng học một lần và nó sẽ trả lại cho phần còn lại của sự nghiệp của bạn.

Câu Hỏi Thường Gặp

Định dạng SQL là gì?

Định dạng SQL là quá trình tổ chức các truy vấn SQL với thụt lề phù hợp, ngắt dòng và chữ hoa/chữ thường của từ khóa để cải thiện khả năng đọc và bảo trì.

Những phương ngữ SQL nào được hỗ trợ?

Trình định dạng của chúng tôi hỗ trợ nhiều phương ngữ SQL bao gồm MySQL, PostgreSQL, SQL Server, SQLite, Oracle và nhiều phương ngữ khác.

Mã SQL của tôi có an toàn không?

Có! Tất cả định dạng SQL xảy ra hoàn toàn trong trình duyệt của bạn. Truy vấn của bạn không bao giờ rời khỏi máy tính của bạn, đảm bảo quyền riêng tư và bảo mật hoàn toàn.

Tôi có thể định dạng nhiều câu lệnh SQL không?

Có, bạn có thể định dạng nhiều câu lệnh SQL cùng một lúc. Trình định dạng sẽ xử lý từng câu lệnh một cách phù hợp dựa trên phương ngữ đã chọn.

Điều gì sẽ xảy ra nếu SQL của tôi có lỗi cú pháp?

Trình định dạng sẽ cố gắng định dạng SQL của bạn ngay cả khi nó chứa lỗi cú pháp. Tuy nhiên, bạn có thể thấy thông báo lỗi cho SQL không hợp lệ không thể được phân tích cú pháp. Luôn xác thực SQL của bạn với hệ thống cơ sở dữ liệu của bạn.