TopDev

CTE (Common Table Expression) là gì và khi nào nên dùng?

minhdev 📖 2 phút đọc

Đâ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.

Bài liên quan trong #Database

✓ Đã sao chép link