AI cho Dev

Prompt Engineering cho SQL: Khi AI viết query tốt hơn Senior

Đừng chỉ bảo AI 'viết query'. Học cách construct prompt để AI tạo ra SQL tối ưu, explain plan, và xử lý data phức tạp.

newspaper

Phạm Hoàng Long

6 tháng 1, 2026 schedule 4 phút đọc
Prompt Engineering cho SQL: Khi AI viết query tốt hơn Senior
Featured Image

Bạn đã bao giờ nhờ ChatGPT viết một câu SQL, chạy thử và nhận lỗi cú pháp hoặc kết quả sai bét?

Vấn đề không phải ở AI. Vấn đề là ở Context.

AI rất giỏi SQL (nó học từ hàng tỷ dòng code GitHub), nhưng nó không có quả cầu pha lê để biết database của bạn trông như thế nào.

Đây là framework prompt tôi dùng để generate những query phức tạp mà Senior Dev cũng ngại viết.

1. Context là Vua (Schema Context)

Sai lầm phổ biến nhất:

  • ❌ “Viết query lấy tổng doanh thu theo tháng.” (AI sẽ đoán tên bảng là orders, sales, hay revenue?)

Cách làm đúng: Cung cấp Schema Definition.

Tôi có schema PostgreSQL như sau:

CREATE TABLE orders (
  id SERIAL PRIMARY KEY,
  user_id INT,
  total_amount DECIMAL(10,2),
  created_at TIMESTAMP
);

CREATE TABLE order_items (
  id SERIAL PRIMARY KEY,
  order_id INT,
  product_id INT,
  quantity INT,
  price DECIMAL(10,2)
);

-- Requirement:
Viết query lấy doanh thu theo từng tháng trong năm 2025.

Mẹo: Không cần paste toàn bộ DDL nếu bảng quá lớn. Chỉ cần tên cột và kiểu dữ liệu quan trọng.

2. Ràng buộc cụ thể (Specific Constraints)

AI thường có xu hướng viết query “ngây thơ” (dễ hiểu nhưng chậm). Hãy force nó viết theo cách tối ưu.

Prompt Pattern:

“Sử dụng CTE (Common Table Expressions) để code dễ đọc.” “Đảm bảo query tận dụng được Index trên cột created_at.” “Không sử dụng subquery trong SELECT list (tránh N+1 problem).”

Ví dụ:

... (Schema context) ...

Requirement: Tìm top 5 user chi tiêu nhiều nhất.
Constraints:
- Chỉ tính các đơn hàng có status = 'completed'.
- Kết quả trả về gồm: user_id, user_name, total_spent, last_order_date.
- Database là MySQL 8.0 (hãy dùng Window Functions nếu cần).

3. “Explain Your Logic” (Chain-of-Thought)

Với các query phức tạp (Nested report, Recursive query), hãy yêu cầu AI giải thích trước khi code.

Prompt:

“Trước khi viết SQL, hãy phân tích logic từng bước (Step-by-step breakdown) để tính retention rate của user sau 30 ngày.”

Kết quả: AI sẽ tự “sửa sai” trong quá trình suy nghĩ.

  1. Bước 1: Xác định user đăng ký trong tháng T.
  2. Bước 2: Xác định user đó có activity trong tháng T+1.
  3. Bước 3: Join hai tập này và tính tỷ lệ.
  4. -> Viết SQL.

4. Tự tạo Dummy Data để Verify

Một prompt pro-tip: Yêu cầu AI tạo luôn dữ liệu mẫu để test query đó.

Prompt:

”… Sau khi viết query, hãy tạo một bộ dữ liệu mẫu (INSERT statements) gồm 5 users và 10 orders để chứng minh query chạy đúng với kết quả mong đợi.”

Điều này giúp bạn verify logic ngay lập tức trên SQL fiddle hoặc local DB.

5. Ví dụ thực tế: Recursive Query

Bài toán: Lấy toàn bộ cây danh mục con (Category Tree) của danh mục “Electronics” (ID=1).

Bad Prompt: “Lấy hết con của Electronics.”

Good Prompt:

Table: categories(id, parent_id, name).
Database: PostgreSQL.

Hãy viết một Recursive CTE để lấy toàn bộ danh mục con (nhiều cấp) của category có id = 1.
Kết quả trả về cần có cột 'level' để biết độ sâu của danh mục.
Giải thích cách CTE hoạt động.

Kết luận

Prompt Engineering cho SQL không khó. Chỉ cần nhớ công thức S-C-R-F:

  • Schema: Cấu trúc bảng là gì?
  • Constraints: Database nào? Rule đặc biệt là gì?
  • Requirement: Output mong muốn là gì?
  • Format: Dùng CTE, Window Function, hay JSON output?

Khi bạn cung cấp đủ context, AI sẽ trở thành DBA riêng của bạn.

quizQuick Quiz
Câu 1/3

Yếu tố quan trọng nhất cần cung cấp trong prompt để AI viết SQL đúng là gì?

history_edu Góc học tập & giải trí

Thử Thách Kiến Thức Lịch Sử?

Khám phá hàng trăm câu hỏi trắc nghiệm lịch sử thú vị tại HistoQuiz. Vừa học vừa chơi, nâng cao kiến thức ngay hôm nay!

Chơi Ngay arrow_forward