Thứ tự thực hiện truy vấn

Trong SQL, nó không được thực hiện theo thứ tự từ trên xuống dưới mà nó thực thi truy vấn theo một thứ tự khác biệt. Dưới đây là thứ tự thực thi.

Thứ tự thực thiTừ khóa SQLChức năng
1FROM / JOINXác định bảng nguồn và kết hợp bảng (join)
2WHERELọc các hàng dữ liệu
3GROUP BYNhóm dữ liệu theo một hoặc nhiều cột
4HAVINGLọc dữ liệu sau khi nhóm
5SELECTChọn các cột cần hiển thị
6DISTINCTLoại bỏ các dòng trùng lặp
7ORDER BYSắp xếp dữ liệu
8LIMIT / OFFSETGiới hạn số dòng kết quả

Lưu ý:

  • Dữ liệu luôn được lọc (WHERE) trước khi nhóm (GROUP BY).

  • Không thể dùng bí danh (AS) trong WHERE vì WHERE thực thi trước SELECT.

Ví dụ minh họa thực tế

Truy vấn SQL mẫu

SELECT department, AVG(salary) AS avg_salary
FROM employees
WHERE salary > 3000
GROUP BY department
HAVING avg_salary > 4000
ORDER BY avg_salary DESC
LIMIT 5;

Phân tích thứ tự thực thi

  1. FROM / JOIN
  • Xác định bảng dữ liệu (employees).

  • Nếu có JOIN, thì các bảng được kết hợp ngay lúc này.

  1. WHERE
  • Lọc ra các dòng có salary > 3000.

  • Các dòng không thỏa mãn điều kiện bị loại bỏ trước khi nhóm (GROUP BY).

  1. GROUP BY
  • Nhóm dữ liệu theo cột department.

  • Tính toán trung bình AVG(salary) cho từng nhóm.

  1. HAVING
  • Lọc các nhóm có avg_salary > 4000.

  • Khác với WHERE (lọc trước khi nhóm), HAVING lọc sau khi nhóm.

  1. SELECT
  • Chọn ra các cột department và avg_salary.

  • Đây là lúc hệ thống xử lý các bí danh (AS avg_salary).

  1. ORDER BY
  • Sắp xếp kết quả theo avg_salary giảm dần (DESC).
  1. LIMIT
  • Lấy 5 dòng đầu tiên của kết quả.

Một số điểm chính

  • WHERE lọc trước GROUP BY, trong khi HAVING lọc sau GROUP BY.

  • Không thể dùng bí danh (AS) trong WHERE, nhưng có thể dùng trong HAVING và ORDER BY.

  • Biết rõ thứ tự thực thi giúp tối ưu hiệu suất truy vấn.