+9

Thứ tự thực thi 1 câu lệnh SQL như thế nào ? SQL execution order

Thứ tự thực thi 1 câu lệnh SQL là một phần quan trọng để thực hiện truy vấn cơ sỡ dữ liệu thông qua ngôn ngữ SQL. Giúp lập trình viên như chúng ta có thể dễ dàng kiểm soát business logic của mình. Từ đó đưa ra các dòng truy phấn phức tạp một cách chính xác hơn. Bài viết ngày hôm nay mình muốn chia sẻ về trình tự thực thi của một câu lệnh SQL. Liệu rằng những gì xảy ra bên dưới của nó có giống như trình sự khi viết mã ? Câu lệnh SQL được thực hiện theo trình tự logic (còn được gọi là logical query processing order) thay vì thứ tự chúng xuất hiện trong câu lệnh. Điều này rất quan trọng để hiểu cách SQL Server, MySQL, PostgreSQL, hoặc các hệ thống quản lý cơ sở dữ liệu khác xử lý câu lệnh SQL. Trình tự thực hiện như sau:

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

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

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

Ở đây, dữ liệu từ employees và departments được kết nối dựa trên department_id.

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

Lọc các hàng (row) dựa trên điều kiện. Chỉ các hàng thỏa mãn điều kiện trong WHERE mới được chuyển sang bước tiếp theo. Ví dụ:

SELECT * FROM employees WHERE salary > 5000;

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

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

Gom các hàng thành các nhóm dựa trên 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ụ:

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

Các nhân viên được nhóm theo department_id, sau đó đếm số lượng nhân viên trong từng phòng ban.

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

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

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

Chỉ các phòng ban có hơn 5 nhân viên được giữ lại.

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

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

SELECT DISTINCT department_id FROM employees;

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

6. Thứ tự thực thi 1 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ụ:

SELECT name, salary FROM employees ORDER BY salary DESC;

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

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

FROM: Lấy dữ liệu thô từ các bảng. **WHERE: **Lọc các hàng. GROUP BY: Gom nhóm. **HAVING: **Lọc các nhóm. SELECT: Chọn 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 đủ

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:

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

Liên quan

https://www.sqlservercentral.com/blogs/sql-server-logical-query-processing https://stackoverflow.com/questions/77476720/physical-processing-vs-logical-processing-does-the-logical-query-processing-ch Một bài viết của viblo cũng rất hay: https://viblo.asia/p/thu-tu-thuc-hien-cho-cau-lenh-sql-XL6lA8ogZek Xem thêm các bài viết gốc của mình tại đây nhé: https://trannhatsang.com/thu-tu-thuc-thi-1-cau-lenh-sql-execution-order/

#database #sql


All rights reserved

Bình luận

Đang tải thêm bình luận...
Avatar
+9
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí