🗄️ DB Testing
Thứ tự viết SQL khác thứ tự thực thi — kiến thức nền cho QA
•5 phút đọc•Tác giả: maiqai.com
Bạn hay nghĩ SQL thực thi từ SELECT xuống. Thực ra FROM được thực thi trước. Hiểu thứ tự này, bạn đọc và viết câu lệnh không còn bị loạn.
Thứ tự VIẾT so với thứ tự CHẠY
Cùng một câu lệnh, đây là khác biệt giữa thứ tự bạn gõ và thứ tự máy thực thi:
| Thứ tự bạn VIẾT | Thứ tự SQL CHẠY | Ý nghĩa (dễ hiểu) |
|---|---|---|
| 1. SELECT | 1. FROM / JOIN | Lấy dữ liệu từ bảng nào, gộp lại. |
| 2. FROM / JOIN | 2. WHERE | Lọc bỏ những dòng không cần. |
| 3. WHERE | 3. GROUP BY | Gom các dòng thành nhóm. |
| 4. GROUP BY | 4. HAVING | Lọc tiếp trên các nhóm vừa gom. |
| 5. HAVING | 5. SELECT | Chọn cột để hiển thị ra. |
| 6. ORDER BY | 6. ORDER BY | Sắp xếp kết quả. |
💡 Mẹo nhớ: đọc và viết câu SQL hãy bắt đầu từ FROM — bạn sẽ không bị loạn khi gặp câu phức tạp.
🧠 Vận dụng tư duy: 2 ví dụ áp dụng ngay
Áp thứ tự thực thi vào hai tình huống hay gặp.
- 1Ví dụ cơ bản — câu SQL 4 bướcCâu SQL đơn giản nhất chỉ có 4 thành phần. Dù bạn gõ SELECT lên đầu, máy không đọc theo thứ tự đó — hãy thử đọc theo số trong ngoặc bên dưới:
SELECT name, email -- (3) chọn cột hiển thị FROM customers -- (1) lấy dữ liệu gốc WHERE city = 'HCM' -- (2) lọc dữ liệu ORDER BY name; -- (4) sắp xếp kết quả
- 2Ví dụ nâng cao — câu SQL 6 bướcKhi câu lệnh có thêm GROUP BY và HAVING, thứ tự đọc dài hơn — nhưng quy tắc vẫn như cũ: luôn bắt đầu từ FROM, không bao giờ từ SELECT:
SELECT user_id, COUNT(*) AS so_don -- (5) chọn cột hiển thị FROM orders -- (1) lấy dữ liệu gốc WHERE status = 'paid' -- (2) lọc dữ liệu thô GROUP BY user_id -- (3) gom nhóm HAVING COUNT(*) > 5 -- (4) lọc nhóm ORDER BY so_don DESC; -- (6) sắp xếp
💡 Mẹo đọc nhanh cho QA: Khi gặp một câu SQL dài, hãy dùng "Chiến thuật Đọc Ngược": lướt mắt xuống tìm FROM trước để biết gốc dữ liệu nằm ở đâu, sau đó dò ngược lên các điều kiện bên trên.
📚 Tài liệu tham khảo
- •Kiến thức nền tảng về hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) và chuẩn ANSI SQL.
- •Microsoft Learn — SELECT (Transact-SQL): mục "Logical processing order of the SELECT statement".
- •PostgreSQL Documentation — SELECT (mô tả thứ tự xử lý truy vấn).
- •GeeksforGeeks — Order of Execution of SQL Queries.
📌 Tóm lại
Mọi người thường nghĩ SELECT chạy đầu tiên, nhưng theo chuẩn ANSI SQL, FROM mới là bước khởi đầu. Nhớ một điều đơn giản này, bạn sẽ đọc và viết câu SQL rõ ràng hơn hẳn.