WITH – Common Table Expression (CTE) trong SQL Server

WITH – Common Table Expression (CTE) trong SQL Server

1. WITH – CTE trong SQL Server là gì ?

    CTE (Common Table Expression) là một biểu thức bảng tạm thời, được đặt tên và có thể sử dụng như một bảng thật trong truy vấn kế tiếp ngay sau đó.

    Nó chỉ tồn tại trong phạm vi của câu lệnh SQL chứa nó.

    Bắt đầu bằng từ khóa WITH, theo sau là tên CTE và phần thân AS (...)

2. Cú pháp chuẩn của CTE trong SQL Server

WITH TenCTE AS (
    -- Truy vấn tạo bảng tạm
    SELECT ...
)
-- Truy vấn chính sử dụng CTE
SELECT * FROM TenCTE
WHERE ...;

3. Ưu điểm của CTE trong SQL Server

Ưu điểm Giải thích
📘 Tăng tính rõ ràng Giúp chia nhỏ truy vấn dài ra thành các phần dễ đọc
🔁 Có thể đệ quy Cho phép tạo CTE gọi lại chính nó để duyệt cây, cấp bậc
🧪 Tái sử dụng dễ dàng Có thể sử dụng nhiều lần trong cùng một câu truy vấn
Thay thế tốt cho subquery và view tạm thời Giữ cho câu SQL gọn hơn

4. Các loại CTE trong SQL Server

    CTE đơn: như ví dụ bạn vừa học
    CTE đệ quy: dùng trong cây phân cấp (ví dụ: thư mục cha – con, nhân viên – cấp trên)
    Nhiều CTE: có thể định nghĩa nhiều CTE nối nhau bằng dấu phẩy ,

5. Lưu ý khi dùng CTE trong SQL Server

Lưu ý Giải thích
Chỉ dùng được trong 1 câu lệnh SQL kế tiếp Không tồn tại lâu như view hoặc table
Không thể ORDER BY trong phần định nghĩa CTE (trừ khi dùng với TOP) Sắp xếp phải nằm ngoài
Không nên quá lạm dụng CTE rất tiện, nhưng nếu lồng quá nhiều tầng có thể làm chậm truy vấn

 


✅ Ví dụ thực tế đơn giản lại:

WITH HocSinhCTE AS (
    SELECT
        MaHS,
        TenHS,
        (Toan + Ly + Hoa) / 3.0 AS DiemTB
    FROM HocSinh
)
SELECT *
FROM HocSinhCTE
WHERE DiemTB >= 7;

Nếu không dùng CTE bạn phải code như sau:

SELECT *
FROM (
    SELECT
        MaHS,
        TenHS,
        Toan,
        Ly,
        Hoa,
        ROUND((Toan + Ly + Hoa) / 3.0, 2) AS DiemTB
    FROM HocSinh
) AS T
WHERE DiemTB >= 7;

 

Bài viết liên quan:

WITH – Common Table Expression (CTE) trong SQL Server