Common Table Expressions (CTEs) là một tính năng mạnh mẽ trong PostgreSQL (và nhiều hệ quản trị cơ sở dữ liệu khác) cho phép bạn định nghĩa các truy vấn tạm thời có thể được tham chiếu trong các câu lệnh SQL. CTE giúp cải thiện tính đọc và tổ chức của mã SQL, đặc biệt khi làm việc với các truy vấn phức tạp.

Cú pháp CTE

Cú pháp cơ bản của một CTE trong PostgreSQL như sau:

WITH cte_name AS (
    -- Truy vấn SQL
    SELECT column1, column2
    FROM table_name
    WHERE condition
)
SELECT *
FROM cte_name;

Các điểm nổi bật về CTE

  1. Tăng tính đọc và bảo trì:
    • CTE giúp bạn chia nhỏ truy vấn phức tạp thành các phần nhỏ hơn, dễ hiểu hơn.
  2. Sử dụng nhiều lần:
    • CTE có thể được tham chiếu nhiều lần trong câu lệnh SQL, giúp giảm thiểu việc viết lại mã.
  3. Hỗ trợ đệ quy:
    • CTE có thể được định nghĩa đệ quy, cho phép bạn thực hiện các truy vấn phức tạp hơn, như tìm kiếm trong cây hay đồ thị.

Ví dụ CTE

Dưới đây là một ví dụ đơn giản về CTE trong PostgreSQL:

WITH sales_data AS (
    SELECT salesperson_id, SUM(sales_amount) AS total_sales
    FROM sales
    GROUP BY salesperson_id
)
SELECT sd.salesperson_id, sd.total_sales
FROM sales_data sd
WHERE sd.total_sales > 10000;

CTE Đệ quy

Dưới đây là một ví dụ về CTE đệ quy, thường được sử dụng để truy vấn dữ liệu cây hoặc đồ thị:

WITH RECURSIVE employee_hierarchy AS (
    SELECT employee_id, manager_id, name
    FROM employees
    WHERE manager_id IS NULL  -- Bắt đầu từ người quản lý cấp cao nhất
    UNION ALL
    SELECT e.employee_id, e.manager_id, e.name
    FROM employees e
    INNER JOIN employee_hierarchy eh ON e.manager_id = eh.employee_id
)
SELECT *
FROM employee_hierarchy;

Kết luận

CTEs là công cụ hữu ích trong PostgreSQL giúp tối ưu hóa việc viết truy vấn và tổ chức mã. Chúng cung cấp sự linh hoạt và khả năng mở rộng cho các tác vụ truy vấn phức tạp, đồng thời giúp mã dễ đọc và bảo trì hơn.