CTE (Common Table Expression) là gì và khi nào nên dùng?
Đây là giải thích về CTE (Common Table Expression) rất dễ hiểu:
CTE (Common Table Expression) là gì?#
CTE là một bảng tạm thời ảo, được định nghĩa ngay trong câu truy vấn SQL và chỉ tồn tại trong phạm vi truy vấn đó.
CTE giúp bạn viết các truy vấn phức tạp trở nên dễ đọc, dễ quản lý và tái sử dụng phần logic truy vấn.
CTE được khai báo bằng từ khóa
WITH, theo sau là tên CTE và truy vấn trả về tập kết quả.
Cấu trúc cơ bản của CTE#
WITH CTE_name AS ( -- truy vấn SQL trả về bảng ảo SELECT column1, column2, ... FROM table_name WHERE ... ) SELECT * FROM CTE_name WHERE ...
Khi nào nên dùng CTE?#
Truy vấn đệ quy (Recursive queries): Ví dụ: truy vấn cấu trúc cây (cây thư mục, cây tổ chức nhân sự).
Tổ chức và tách logic truy vấn phức tạp: Khi truy vấn có nhiều bước tính toán, JOIN phức tạp, bạn có thể tách từng phần ra CTE để dễ theo dõi.
Tái sử dụng kết quả trung gian nhiều lần trong truy vấn: Thay vì viết lại truy vấn con phức tạp nhiều lần, bạn dùng CTE đặt tên cho kết quả trung gian đó.
Thay thế cho truy vấn con (subquery) phức tạp hoặc View tạm thời: CTE không tạo ra bảng vật lý, giúp truy vấn ngắn gọn, không phải tạo bảng tạm riêng biệt.
Ví dụ đơn giản#
Giả sử bạn muốn lấy danh sách nhân viên có lương cao hơn trung bình công ty:
WITH AvgSalary AS ( SELECT AVG(salary) AS avg_salary FROM employees ) SELECT e.name, e.salary FROM employees e, AvgSalary a WHERE e.salary > a.avg_salary;
Tóm lại#
CTE giúp viết truy vấn rõ ràng, dễ đọc hơn.
Hữu ích khi xử lý truy vấn phức tạp hoặc truy vấn đệ quy.
Là công cụ rất mạnh và phổ biến trong SQL Server, PostgreSQL, Oracle, MySQL 8+, v.v.