با سلام، در این قسمت از سری آموزش جامع زبان SQL در رابطه با کلیدواژه ی ORDER BY صحبت خواهیم کرد.
با استفاده از کلیدواژه ی ORDER BY می توانیم result-set (نتایج برگشتی از پایگاه داده) خود را به ترتیب صعودی یا نزولی مرتب کنیم.
حالت پیش فرض این کلیدواژه، مرتب سازی به صورت صعودی است اما اگر می خواهید مقادیری را به صورت نزولی مرتب کنید می توانید از کلیدواژه ی DESC استفاده کنید.
ابتدا نگاهی به ساختار کلی (syntax) بیندازید:
SELECT column1, column2, ... FROM table_name ORDER BY column1, column2, ... ASC|DESC;
توجه: قسمت "ASC | DESC" در کد بالا یعنی یا می توانید از ASC استفاده کنید و یا DESC. هیچ گاه همزمان از هر دو استفاده نکنید چرا که منطقی نیست؛ نمی توان نتایج را همزمان به صورت صعودی و نزولی مرتب کرد.
بیایید چند مثال واقعی از این کلیدواژه ببینیم...
قبل از هر کاری، نگاهی به قسمتی از پایگاه داده ی Northwind بیندازید:
ما تمامی مثال ها را روی این جدول پیاده سازی خواهیم کرد.
مثال اول از ORDER BY
به کد زیر دقت کنید:
SELECT * FROM Customers ORDER BY Country;
این کد تمام مشتریان را از جدول Customers انتخاب می کند و آن ها را بر اساسِ ستون country مرتب می کند.
سوال: این مرتب سازی به چه ترتیبی خواهد بود؟
پاسخ: همانطور که گفتیم حالت پیش فرض این دستور، ASC (صعودی) است اما در مورد اینکه چطور می خواهد اسم کشور ها را صعودی مرتب کند باید گفت این کار کار را بر اساس ترتیب حروف الفبا در انگلیسی انجام می دهد. با استفاده از لینک زیر به خروجی این کد بروید و به ستون country و CustomerID دقت کنید. بلافاصله متوجه می شوید که ترتیب نمایش مشتریان دیگر بر اساس CustomerID نیست بلکه اولین ردیف برگردانده شده دارای CustomerID = 12 و دومین ردیف دارای CustomerID = 54 است.
برای مشاهده ی نتیجه ی کد بالا روی این لینک کلیک کنید.
نکته: از آن جایی که حالت پیش فرضِ ORDER BY صعودی (ASC) است، دیگر نیازی به نوشتن این مورد نیست. در واقع اگر دستور ASC را به کد بالا اضافه کنید هیچ تغییری مشاهده نمی کنید و خطایی نیز رخ نمی دهد اما زیاده نویسی کرده اید.
مثال دوم از ORDER BY DESC
به کد زیر توجه کنید:
SELECT * FROM Customers ORDER BY Country DESC;
این کد، دقیقا مانند کد قبل، تمام مشتریان را از جدول Customers انتخاب می کند و آن ها را بر اساسِ ستون country مرتب می کند اما فرق کوچکی با آن دارد. فرقشان در این است که این دستور نتایج را به صورت نزولی (DESC) مرتب می کند.
برای مشاهده ی نتیجه ی کد بالا روی این لینک کلیک کنید.
مثال سوم از ORDER BY به صورت چند ستونی
بله می توان از ORDER BY به صورت چند ستونی نیز استفاده کرد:
SELECT * FROM Customers ORDER BY Country, CustomerName;
این کد، دقیقا مانند دو کد قبلی، تمام مشتریان را از جدول Customers انتخاب می کند و آن ها را بر اساسِ ستون country و CustomerName مرتب می کند. این به چه معنی است؟ اگر هنگام استفاده از ORDER BY به آن دو ستون یا بیشتر بدهید رفتارش به شکل زیر می شود:
برای مشاهده ی نتیجه ی کد بالا روی این لینک کلیک کنید.
نکته: شما می توانید در چنین حالتی از دستورات ASC و DESC نیز استفاده کنید:
SELECT * FROM Customers ORDER BY Country ASC, CustomerName DESC;
چند لحظه فکر کنید و سعی کنید خودتان به این جواب برسید که در جواب این کد چه نتیجه ای به ما نشان داده خواهد شد.
رفتار این کد به شکل زیر خواهد بود:
برای مشاهده ی نتیجه ی کد بالا روی این لینک کلیک کنید.
به تفاوت این کد و کد قبلی خوب توجه کنید:
کد اول: ORDER BY ASC
کد دوم: ORDER BY DESC
آیا متوجه تفاوت شدید؟ دو تصویر بالا، دارای 3 ردیف اول (همان 3 مشتری اول) از result set های کد های ما هستند. هر دو کدِ ما آن ها را در ابتدا بر اساس country مرتب کرده اند (حرف A اولین حرف الفبا در زبان انگلیسی است بنابراین این نتایج در ردیف های اول قرار گرفته اند). حالا برای مرتب کردن خودشان باید بر اساس CustomerName حرکت کرد اما صعودی یا نزولی؟ کد اول صعودی و کد دوم نزولی عمل کرده است (ما اینطور کد نوشته ایم) بنابراین نتایج آن ها دقیقا برعکس هستند. برای مقایسه ی CustomerName به این شکل عمل می شود:
سوال: اگر حرف های اول نام مشتریان یکی بود چطور؟ مثلا نام یکی Jack و نام دیگری Joe باشد.
پاسخ: در این صورت حرف اول رها شده و به سراغ حرف دوم می رویم. در این مثال Jack و Joe را داریم که حرف اولشان یکسان است اما حرف دومشان خیر. از آن جایی که a زودتر از o می آید، Jack قبل از Joe قرار می گیرد مگر آنکه ترتیب را نزولی بگذاریم. اگر حرف دومشان نیز یکی باشد، به سراغ حرف سوم می رویم و همینطور الی آخر.
در این قسمت با کلیدواژه ی ORDER BY برای مرتب سازی result set ها (نتایج برگشتی از پایگاه داده پس از اجرای کوئری) آشنا شدیم و نکات کلیدی و ریز پیرامون آن را با ذکر مثال توضیح دادیم. امیدوارم از این قسمت لذت برده باشید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.