آموزش گامبهگام SQL Server با دیتابیس نمونهی AdventureWorks | از مبتدی تا پیشرفته | (قسمت ۳)

درس ۳: مرتبسازی و محدود کردن نتایج با ORDER BY و TOP
🎯 هدف درس:
در این درس با نحوهی مرتبسازی دادهها با استفاده از عبارت ORDER BY و محدودسازی تعداد رکوردهای خروجی با دستور TOP آشنا میشوید. این دستورات برای تهیه گزارشهای مرتبشده و نمایش رکوردهای برتر بسیار کاربردی هستند.
📘 مفهوم نظری:
عبارت ORDER BY برای مرتبسازی دادهها در خروجی بر اساس یک یا چند ستون استفاده میشود و دستور TOP برای محدودسازی تعداد رکوردهای بازگرداندهشده کاربرد دارد. در ادامه ۱۰ الگوی پرکاربرد از این دو دستور را مشاهده میکنید:
۱. مرتبسازی صعودی:
ORDER BY ColumnName ASC
کاربرد: مرتبسازی دادهها از مقدار کوچک به بزرگ (A→Z یا 1→9).
SELECT Name, ListPrice
FROM Production.Product
ORDER BY ListPrice ASC;
۲. مرتبسازی نزولی:
ORDER BY ColumnName DESC
کاربرد: مرتبسازی دادهها از مقدار بزرگ به کوچک (Z→A یا 9→1).
SELECT Name, ListPrice
FROM Production.Product
ORDER BY ListPrice DESC;
۳. مرتبسازی چندستونه:
ORDER BY Column1 DESC, Column2 ASC
کاربرد: مرتبسازی دادهها بر اساس بیش از یک ستون، مثلاً ابتدا بر اساس دسته، سپس بر اساس قیمت.
SELECT ProductSubcategoryID, Name, ListPrice
FROM Production.Product
ORDER BY ProductSubcategoryID ASC, ListPrice DESC;
۴. محدودسازی تعداد رکوردها:
SELECT TOP (N) Columns FROM TableName;
کاربرد: بازگرداندن فقط N ردیف اول از نتایج (مثلاً ۱۰ رکورد برتر).
SELECT TOP (10) Name, ListPrice
FROM Production.Product;
۵. ترکیب TOP و ORDER BY:
SELECT TOP (N) Columns FROM TableName ORDER BY Column DESC;
کاربرد: انتخاب N رکورد برتر پس از مرتبسازی دادهها.
SELECT TOP (5) Name, ListPrice
FROM Production.Product
ORDER BY ListPrice DESC;
۶. مرتبسازی بر اساس تاریخ:
ORDER BY DateColumn DESC
کاربرد: نمایش جدیدترین رکوردها (مثلاً آخرین سفارشها).
SELECT TOP (10) SalesOrderID, OrderDate, TotalDue
FROM Sales.SalesOrderHeader
ORDER BY OrderDate DESC;
۷. مرتبسازی چندسطحی با رشته و عدد:
ORDER BY TextColumn ASC, NumericColumn DESC
کاربرد: اول بر اساس رشته (مثلاً نام دسته)، سپس بر اساس عدد (مثلاً قیمت) مرتب میکند.
SELECT ProductSubcategoryID, Name, ListPrice
FROM Production.Product
ORDER BY Name ASC, ListPrice DESC;
۸. نمایش درصدی از دادهها (TOP PERCENT):
SELECT TOP (X) PERCENT Columns FROM TableName ORDER BY Column DESC;
کاربرد: برگرداندن درصدی از کل رکوردها (مثلاً ۱۰٪ گرانترین محصولات).
SELECT TOP (10) PERCENT Name, ListPrice
FROM Production.Product
ORDER BY ListPrice DESC;
۹. مرتبسازی با NULL:
ORDER BY CASE WHEN Column IS NULL THEN 1 ELSE 0 END, Column ASC;
کاربرد: کنترل ترتیب نمایش مقادیر NULL در ابتدای یا انتهای لیست.
SELECT Name, ListPrice
FROM Production.Product
ORDER BY CASE WHEN ListPrice IS NULL THEN 1 ELSE 0 END, ListPrice ASC;
۱۰. استفاده از ORDER BY در زیرکوئریها:
SELECT * FROM (SELECT TOP (N) ... ORDER BY ...) AS Alias ORDER BY ...;
کاربرد: کنترل ترتیب و تعداد رکوردها قبل از اعمال مرتبسازی نهایی.
SELECT *
FROM (SELECT TOP (10) Name, ListPrice
FROM Production.Product
ORDER BY ListPrice DESC) AS Temp
ORDER BY Name ASC;
🧠 تمرینهای عملی:
- تمرین ۱: نمایش ۱۰ محصول گرانقیمت با استفاده از ORDER BY و TOP.
- تمرین ۲: نمایش ۵ سفارش اخیر بر اساس OrderDate.
- تمرین ۳: فهرست ۱۰ مشتری اول به ترتیب شناسه CustomerID.
- تمرین ۴: نمایش ۵ درصد از محصولات با بالاترین قیمت.
- تمرین ۵ (چالشی): فهرست ۳ سفارش با بیشترین مبلغ کل (TotalDue) همراه با تاریخ و شناسه مشتری.
💡 پاسخ تمرینهای عملی:
-- تمرین ۱
SELECT TOP (10) Name, ListPrice
FROM Production.Product
ORDER BY ListPrice DESC;
-- تمرین ۲
SELECT TOP (5) SalesOrderID, OrderDate, CustomerID
FROM Sales.SalesOrderHeader
ORDER BY OrderDate DESC;
-- تمرین ۳
SELECT TOP (10) CustomerID, TerritoryID
FROM Sales.Customer
ORDER BY CustomerID ASC;
-- تمرین ۴
SELECT TOP (5) PERCENT Name, ListPrice
FROM Production.Product
ORDER BY ListPrice DESC;
-- تمرین ۵ (چالشی)
SELECT TOP (3) SalesOrderID, OrderDate, CustomerID, TotalDue
FROM Sales.SalesOrderHeader
ORDER BY TotalDue DESC;
📚 جمعبندی درس:
در این درس با نحوهی مرتبسازی نتایج با استفاده از ORDER BY و محدود کردن تعداد رکوردها با TOP آشنا شدیم. یاد گرفتیم چگونه دادهها را بهصورت صعودی یا نزولی مرتب کنیم، چندین ستون را ترکیب کنیم، و درصدی از دادهها را نمایش دهیم. در درس بعدی، وارد مبحث GROUP BY و توابع تجمیعی مانند COUNT، SUM و AVG خواهیم شد تا بتوانیم دادهها را در گروههای منطقی خلاصه کنیم.




دیدگاه خود را ثبت کنید
تمایل دارید در گفتگوها شرکت کنید؟در گفتگو ها شرکت کنید.