📚 فصل ۲۰ — مرتب‌سازی داده‌ها با ORDER BY در SQL Server

""

1️⃣ مقدمه — چرا مرتب‌سازی داده‌ها مهم است؟

وقتی داده‌ها را از پایگاه داده برمی‌گردانیم، معمولاً به ترتیب خاصی نیاز داریم. مثلاً:

  • لیست محصولات از ارزان به گران
  • مشتریان به ترتیب نام خانوادگی
  • سفارش‌ها بر اساس تاریخ ثبت، از جدید به قدیم

📌 دستور ORDER BY ابزار اصلی مرتب‌سازی در SQL Server است.


2️⃣ ساختار پایه ORDER BY

SELECT ستون‌ها
FROM جدول
ORDER BY ستون [ASC | DESC];
  • ASC → صعودی (کم به زیاد، پیش‌فرض)
  • DESC → نزولی (زیاد به کم)

3️⃣ مرتب‌سازی بر اساس یک ستون

مثال — مرتب‌سازی مشتریان بر اساس نام:

SELECT CustomerID, FullName, City
FROM Customers
ORDER BY FullName ASC;

مثال — مرتب‌سازی محصولات بر اساس قیمت نزولی:

SELECT ProductID, Name, Price
FROM Products
ORDER BY Price DESC;

4️⃣ مرتب‌سازی بر اساس چند ستون

وقتی می‌خواهیم ترتیب دوم داشته باشیم:

SELECT FullName, City
FROM Customers
ORDER BY City ASC, FullName ASC;

📌 ابتدا شهر مرتب می‌شود، اگر دو نفر در یک شهر باشند، بر اساس نام مرتب می‌شوند.


5️⃣ مرتب‌سازی بر اساس ستون محاسبه‌شده

می‌توان بر اساس نتیجه یک محاسبه مرتب کرد:

SELECT Name, Price, Stock, (Price * Stock) AS TotalValue
FROM Products
ORDER BY TotalValue DESC;

6️⃣ مرتب‌سازی بر اساس شماره ستون

(خوش‌خوان‌ نیست ولی امکان‌پذیر است)

SELECT Name, Price, Stock
FROM Products
ORDER BY 2 DESC;

📌 ستون دوم یعنی Price مرتب می‌شود.

⚠ توصیه: از شماره ستون کمتر استفاده کنید، چون اگر ترتیب ستون‌ها تغییر کند ممکن است نتیجه تغییر کند.


7️⃣ ترکیب ORDER BY با WHERE

SELECT FullName, City
FROM Customers
WHERE City = N'تهران'
ORDER BY FullName ASC;

📌 اول داده‌ها فیلتر می‌شوند، سپس مرتب‌سازی انجام می‌شود.


8️⃣ استفاده از TOP همراه با ORDER BY

نمایش اولین ۱۰ محصول گران:

SELECT TOP 10 Name, Price
FROM Products
ORDER BY Price DESC;

📌 اگر ORDER BY نباشد، نتایج نامرتب هستند.


9️⃣ مرتب‌سازی متن‌های فارسی و انگلیسی (Collation)

مرتب‌سازی بر اساس Collation تعریف‌شده ستون:

SELECT FullName
FROM Customers
ORDER BY FullName COLLATE Persian_100_CS_AS;

📌 می‌توانید ترتیب فارسی یا انگلیسی را کنترل کنید.


🔟 نکات حرفه‌ای برای عملکرد بهتر

  • ستون‌هایی که زیاد در ORDER BY استفاده می‌شوند بهتر است ایندکس داشته باشند.
  • مرتب‌سازی روی ستون محاسبه‌شده کندتر است، مگر اینکه Computed Column Indexed باشد.
  • اگر داده زیاد است، خروجی مرتب‌سازی را Pagination کنید.

1️⃣1️⃣ مثال‌های حرفه‌ای

مثال ۱ — سفارش‌ها از جدید به قدیم و سپس مبلغ:

SELECT OrderID, OrderDate, Amount
FROM Orders
ORDER BY OrderDate DESC, Amount DESC;

مثال ۲ — مشتریان بر اساس طول نام:

SELECT FullName
FROM Customers
ORDER BY LEN(FullName) ASC;

مثال ۳ — ترکیب ORDER BY با CASE برای اولویت‌بندی:

SELECT FullName, IsActive
FROM Customers
ORDER BY CASE IsActive WHEN 1 THEN 0 ELSE 1 END, FullName ASC;

📌 مشتریان فعال اول بیایند.


1️⃣2️⃣ سناریوهای واقعی

سناریو ۱ — لیست محصولات پر فروش

SELECT ProductID, Name, TotalSales
FROM Products
ORDER BY TotalSales DESC;

سناریو ۲ — لیست کارمندان بر اساس بخش و سپس تاریخ استخدام:

SELECT EmployeeID, FullName, Department, HireDate
FROM Employees
ORDER BY Department ASC, HireDate DESC;

سناریو ۳ — مرتب‌سازی سفارش‌ها بر اساس روز هفته:

SELECT OrderID, OrderDate
FROM Orders
ORDER BY DATEPART(WEEKDAY, OrderDate) ASC;

1️⃣3️⃣ اشتباهات رایج

  1. استفاده از ORDER BY بدون مشخص کردن ASC یا DESC و انتظار نتیجه خاص.
  2. مرتب‌سازی روی ستون‌هایی که نوع داده‌شان رشته‌ای است، ولی انتظار ترتیب عددی دارید:
   -- اشتباه: به صورت رشته‌ای مرتب می‌کند
   SELECT Price
   FROM Products
   ORDER BY Price;

راه درست: اطمینان از اینکه Price یک نوع عددی است.

  1. استفاده از ORDER BY همراه با % در LIKE و انتظار عملکرد سریع بدون ایندکس.

1️⃣4️⃣ تمرین‌های عملی

  1. نمایش ۵ محصول گران اول (بر اساس قیمت).
  2. مرتب‌سازی مشتریان بر اساس نام خانوادگی و سپس نام کوچک.
  3. نمایش سفارش‌ها از جدید به قدیم.
  4. مرتب‌سازی کارمندان بر اساس تعداد پروژه‌های انجام شده.
  5. نمایش لیست کالاها بر اساس موجودی، از بیشترین به کمترین.

1️⃣5️⃣ جمع‌بندی

در این فصل یاد گرفتید:

  • ساختار ORDER BY و نحوه مرتب‌سازی صعودی/نزولی
  • مرتب‌سازی بر اساس چند ستون
  • مرتب‌سازی ستون‌های محاسبه‌شده و شماره ستون
  • ترکیب ORDER BY با WHERE و TOP
  • نکات حرفه‌ای برای بهینه‌سازی
  • سناریوهای واقعی و تمرین‌های عملی
محمد وب‌سایت

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

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