عبارت order by در SQL
کلمه کلیدی ORDER BY برای مرتب کردن نتیجه پرس و جو استفاده می شود.
کلمه کلیدی ORDER BY
دستور ORDER BY برای مرتب کردن نتیجه پرس و جو بر اساس ستون مشخص شده استفاده می شود.
در دستور ORDER BY به صورت پیش فرض، رکوردها به صورت صعودی (از کوچک به بزرگ) مرتب می شوند.
اگر می خواهید رکوردها را نزولی (از بزرگ به کوچک) مرتب کنید، باید از کلید واژه DESC استفاده کنید.
فرم کلی ORDER BY:
SELECT column_name(s)
FROM table_name
ORDER BY column_name(s) ASC|DESC
مثال:
در جدول "Persons"
P_Id | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
4 | Nilsen | Tom | Vingvn 23 | Stavanger |
می خواهیم تمام افراد ازجدول بالا را انتخاب کنیم اما افراد بر اساس نام خانوادگی شان مرتب شده باشند.
از عبارت SELECT زیر استفاده می کنیم:
SELECT * FROM Persons
ORDER BY LastName
result-set به این صورت می شود:
P_Id | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
4 | Nilsen | Tom | Vingvn 23 | Stavanger |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
مثال ORDER در حالت DESC
حالا می خواهیم تمام افراد جدول بالا را بر اساس ترتیب نزولی نام خانوادگی شان انتخاب کنیم.
از عبارت SELECT زیر استفاده می کنیم:
SELECT * FROM Persons
ORDER BY LastName DESC
result-set به صورت زیر خواهد بود:
P_Id | LastName | FirstName | Address | City |
---|---|---|---|---|
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
4 | Nilsen | Tom | Vingvn 23 | Stavanger |
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
- نوشته شده توسط مهندس تمیزی
- بازدید: 29328
دیدگاهها
سلام
ممنون از آموزشهای خوبتون.
ایا میشه چینش جدول نتیجه به این صورت باشه که مثلا ابتدا براساس نام و اگه مساوی بود بر اساس یه چیز دیگه که خودمان تعیین کنیم باشه؟
سلام
دقیقاً این اتفاق می افتد. وقتی می گوییم order by a,b سورت ابتدا روی ستون a و سپس روی ستون b انجام می شود. یعنی اگر مقادیر ستون a مساوی بود مقادیر ستون b برای مقایسه و چنینش نتیجه انتخاب می شود. در صورتی که مقادیر این ستون نیز برابر بود بر اساس چینش فیزیکی رکوردها مقادیر برگردانده می شود.
سلام
فرضا ما میخواهیم بر اساس نام افراد مرتب کنیم ولی نام دو فرد یکیه. آن وقت اساس چینش در result-set به چه صورت میشه؟ و کدوم فرد بالای دیگری در جدول قرار میگیره؟
سلام.
در این صورت اگر هیچ گونه کلیدی روی سایر ستون های جدول نداشته باشیم، بر اساس ترتیب فیزیکی داده ها مرتب می شوند. یعنی رکوردی که دیرتر وارد شده زودتر نمایش داده می شود و به همین ترتیب رکوردهای بعدی. یعنی ترتیب زمانی درج رکوردها هستند که چینش result-set را مشخص می کنند.
در صورتی که در سایر ستون ها، primary key یا unique key داشته باشیم، بر اساس این ستون ها مرتب می شوند. یعنی مثلاً اگر کد ملی افراد به عنوان کلید اصلی جدول می باشد، ابتدا افراد بر اساس نامشان مرتب می شوند و در صورتی که نام های مشابهی داشته باشند، بر اساس کد ملی مرتب می شوند.
---------------------------------------------------------------------------------------------------------------------
توجه: اگر روی یک جدول یکبار کد ملی را به عنوان کلید اصلی تنظیم کنیم و سپس این کلید را حذف کنیم، چینش رکوردها پس از نام مجدداً بر اساس کد ملی می باشد. دلیلش هم این است که وقتی کد ملی را به عنوان کلید اصلی انتخاب می کنیم، چینش فیزیکی رکوردها بر اساس کد ملی در جدول تغییر پیدا می کند به عبارت دیگر دیگر ترتیب زمانی درج رکوردها چینش رکوردها در result-set را مشخص نمی کند.
برای درک بهتر این مفاهیم باید ایندکس ها را بشناسید، در لینک زیر نقل قولی وجود دارد که ایندکس ها بیشتر توضیح داده شده است:
beyamooz.com/sql/101-advanced/280-%D8%AF%D8%B3%D8%AA%D9%88%D8%B1-create-index-%D8%AF%D8%B1-sql