ترکیب جدولها و سادهسازی کوئری با CTE
JOIN در SQL Server مانند سایر پایگاههای دادهی رابطهای عمل میکند و برای ترکیب داده از چند جدول استفاده میشود:
SELECT c.FullName, o.Total, o.CreatedAt
FROM Orders o
INNER JOIN Customers c ON c.Id = o.CustomerId
WHERE o.Total > 500000
ORDER BY o.CreatedAt DESC;
CTE یا Common Table Expression، که با کلیدواژهی WITH تعریف میشود، یک نتیجهی موقت است که میتوانید در ادامهی همان کوئری از آن استفاده کنید. CTE بهویژه برای شکستن کوئریهای پیچیده به بخشهای کوچکتر و خواناتر بسیار مفید است:
WITH CustomerTotals AS (
SELECT CustomerId, SUM(Total) AS TotalSpent
FROM Orders
GROUP BY CustomerId
)
SELECT c.FullName, ct.TotalSpent
FROM CustomerTotals ct
JOIN Customers c ON c.Id = ct.CustomerId
WHERE ct.TotalSpent > 1000000;
یکی از کاربردهای مهم CTE، نوشتن کوئری بازگشتی (Recursive CTE) است که برای پیمایش ساختارهای درختی مانند دستهبندیهای تودرتو استفاده میشود:
WITH CategoryTree AS (
SELECT Id, Name, ParentId, 0 AS Level
FROM Categories WHERE ParentId IS NULL
UNION ALL
SELECT c.Id, c.Name, c.ParentId, ct.Level + 1
FROM Categories c
JOIN CategoryTree ct ON c.ParentId = ct.Id
)
SELECT * FROM CategoryTree;
ترکیب JOIN و CTE به شما اجازه میدهد گزارشهای پیچیده را در قالبی خوانا و قابل نگهداری بنویسید.