0
0
Lập trình
Flame Kris
Flame Krisbacodekiller

Tìm Hiểu Trình Tự Thực Thi Câu Lệnh SQL Để Tối Ưu Hóa Truy Vấn Dữ Liệu

Đăng vào 1 tháng trước

• 3 phút đọc

Chủ đề:

DatabaseSQL

Trình tự thực thi của câu lệnh SQL là một yếu tố quan trọng giúp lập trình viên tối ưu hóa truy vấn dữ liệu thông qua ngôn ngữ SQL. Việc hiểu rõ trình tự này sẽ giúp bạn dễ dàng quản lý business logic của mình và viết các truy vấn phức tạp một cách hiệu quả. Bài viết này sẽ đi sâu vào từng bước trong trình tự thực thi của một câu lệnh SQL và cách chúng hoạt động so với trật tự viết mã. SQL được thực thi theo thứ tự logic (hay còn gọi là logical query processing order), không phải theo thứ tự câu lệnh được viết. Điều này rất cần thiết để bạn hiểu cách mà SQL Server, MySQL, PostgreSQL và các hệ quản trị cơ sở dữ liệu khác xử lý câu lệnh. Trình tự thực thi diễn ra như sau:

1. Thực thi câu lệnh SQL với FROM

Xác định bảng hoặc tập dữ liệu được truy vấn. Nếu có phép nối (JOIN), dữ liệu sẽ được kết hợp tại bước này. Ví dụ:

sql Copy
SELECT * FROM employees JOIN departments ON employees.department_id = departments.id;

Ở đây, dữ liệu từ hai bảng employees và departments được kết nối qua trường department_id.

2. Thực thi câu lệnh SQL với WHERE

Lọc các hàng (row) theo điều kiện đã đặt. Chỉ những hàng đáp ứng điều kiện trong WHERE mới được đưa vào bước tiếp theo. Ví dụ:

sql Copy
SELECT * FROM employees WHERE salary > 5000;

Chỉ những nhân viên có mức lương lớn hơn 5,000 sẽ được chọn.

3. Thực thi câu lệnh SQL với GROUP BY

Nhóm các hàng theo một hoặc nhiều cột. Dữ liệu lúc này được “nén” lại thành các nhóm. Ví dụ:

sql Copy
SELECT department_id, COUNT(*) FROM employees GROUP BY department_id;

Những nhân viên sẽ được nhóm theo department_id, và sau đó đếm số lượng nhân viên trong mỗi phòng ban.

4. Thực thi câu lệnh SQL với HAVING

Lọc các nhóm đã được tạo ra sau bước GROUP BY. Khác với WHERE, HAVING hoạt động trên các tập hợp (groups) thay vì riêng lẻ. Ví dụ:

sql Copy
SELECT department_id, COUNT(*) FROM employees GROUP BY department_id HAVING COUNT(*) > 5;

Chỉ giữ lại nhóm nào có hơn 5 nhân viên.

5. Thực thi câu lệnh SQL với SELECT

Chọn cột hoặc biểu thức để hiển thị. Các hàm tổng hợp (SUM, AVG, COUNT,...) được thực hiện ở đây. Nếu sử dụng DISTINCT, các bản ghi trùng lặp sẽ được loại bỏ. Ví dụ:

sql Copy
SELECT DISTINCT department_id FROM employees;

Chỉ trả về danh sách các department_id duy nhất.

6. Thực thi câu lệnh SQL với ORDER BY

Sắp xếp kết quả theo một hoặc nhiều cột. Ví dụ:

sql Copy
SELECT name, salary FROM employees ORDER BY salary DESC;

Danh sách nhân viên sẽ được sắp xếp giảm dần theo lương.

Tóm tắt trình tự thực hiện SQL

  • FROM: Lấy dữ liệu thô từ bảng.
  • WHERE: Lọc các hàng dựa trên điều kiện.
  • GROUP BY: Gom nhóm các hàng.
  • HAVING: Lọc các nhóm đã được tạo ra.
  • SELECT: Chọn các cột và biểu thức.
  • DISTINCT: Loại bỏ bản ghi trùng lặp.
  • ORDER BY: Sắp xếp kết quả.

Ví dụ minh họa đầy đủ

sql Copy
SELECT department_id, COUNT(*) AS num_employees FROM employees WHERE salary > 5000 GROUP BY department_id HAVING COUNT(*) > 3 ORDER BY num_employees DESC;

Trình tự thực hiện:

  1. FROM employees: Lấy tất cả dữ liệu từ bảng employees.
  2. WHERE salary > 5000: Lọc các hàng có lương > 5,000.
  3. GROUP BY department_id: Gom nhóm theo department_id.
  4. HAVING COUNT(*) > 3: Chỉ giữ lại những nhóm có hơn 3 nhân viên.
  5. SELECT department_id, COUNT(*): Chọn cột department_id và số lượng nhân viên.
  6. ORDER BY num_employees DESC: Sắp xếp theo số lượng nhân viên giảm dần.

Kết quả: Trả về các phòng ban có hơn 3 nhân viên với mức lương trên 5,000, được sắp xếp theo số lượng nhân viên từ cao xuống thấp.

Tài liệu tham khảo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào