فصل دوم: کوئری‌نویسی پیشرفته

JOIN و CTE

ترکیب جدول‌ها و ساده‌سازی کوئری با 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 به شما اجازه می‌دهد گزارش‌های پیچیده را در قالبی خوانا و قابل نگهداری بنویسید.

برای ذخیره‌ی پیشرفت و شرکت در آزمون، وارد شوید — رایگان است.