</>
⌕
Mid #subquery#cte#recursive

Subquery và CTE (WITH) khác nhau thế nào?

⚡ Trả lời nhanh

Subquery lồng trong câu lệnh chính; CTE (WITH) đặt tên cho tập kết quả tạm, giúp câu truy vấn dễ đọc, tái sử dụng trong cùng câu lệnh và hỗ trợ đệ quy. Hiệu năng thường tương đương, tuỳ optimizer có inline hay materialize CTE.

WITH monthly AS (
  SELECT user_id, SUM(total) AS revenue
  FROM orders
  WHERE created_at >= '2025-01-01'
  GROUP BY user_id
)
SELECT u.name, m.revenue
FROM monthly m JOIN users u ON u.id = m.user_id
WHERE m.revenue > 1000;
-- CTE đệ quy: duyệt cây danh mục
WITH RECURSIVE tree AS (
  SELECT id, parent_id FROM categories WHERE id = 1
  UNION ALL
  SELECT c.id, c.parent_id FROM categories c JOIN tree t ON c.parent_id = t.id
)
SELECT * FROM tree;
🃏 Ôn bằng flashcard