SQL Server Training with AdventureWorks Sample Database

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

SQL Server Training with AdventureWorks Sample Database
SQL Server Training with AdventureWorks Sample Database

درس ۳: مرتب‌سازی و محدود کردن نتایج با 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 خواهیم شد تا بتوانیم داده‌ها را در گروه‌های منطقی خلاصه کنیم.

0 پاسخ

دیدگاه خود را ثبت کنید

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

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *