ترتیب بر اساس نحو. مرتب سازی داده ها در SQL (ORDER BY). مرتب سازی داده های انتخاب شده

توجه داشته باشید:
همه مقالات در دسته آموزشی فعلی SQL از مثال ها و مشکلات مبتنی بر پایگاه داده آموزشی استفاده می کنند.

طبق اولین شکل عادی پایگاه داده های رابطه ای، ترتیب ردیف ها در جداول نباید مهم باشد. اما در عمل غالباً لازم است اطلاعات قبل از نمایش روی صفحه مرتب شوند.

عبارت ORDER BY مسئول مرتب سازی ردیف های بارگذاری شده در پرس و جوی SQL است. در انتهای درخواست قرار دارد:

انتخاب کنید<Перечень столбцов>از جانب<Перечень таблиц>سفارش توسط<Условие сортировки>

شرط مرتب سازی ستون هایی را مشخص می کند که ردیف های جدول به دست آمده بر اساس آنها مرتب می شوند:

ترتیب بر اساس col1، col2

ترتیب مرتب سازی در SQL

2 گزینه مرتب سازی وجود دارد: صعودی و نزولی. برای نشان دادن نوع مرتب سازی در پرس و جو، پس از نام ستون، نشان دهید کلمه کلیدی ASC (صعودی) یا DESC (نزولی) که به ترتیب صعودی یا نزولی را تعریف می کنند. نوع پیش فرض ASC است:

ORDER BY col1 -- بند بعدی معادل ORDER BY col1 ACS خواهد بود

همچنین می توان ترتیب متفاوتی را برای ستون های مختلف تعیین کرد:

ترتیب بر اساس col1 DESC، col2 ASC

برای ادغام مطالب، مشکل را در پایگاه داده آموزشی حل کنید:

شما باید فهرستی از شناسه‌های کارمندان را به‌دست آورید که بر اساس گروه به ترتیب صعودی و تاریخ استخدام، جدیدترین به قدیمی‌ترین مرتبه‌سازی شده‌اند.

SELECT ID, Group, Hire_date FROM Employees ORDER BY Group, Hire_date DESC

بیایید دستور دستور SELECT را با عبارت ORDER BY تکمیل کنیم (نوار عمودی به این معنی است که یکی از گزینه ها باید انتخاب شود):

[TableName.]ColumnName[, [TableName.]ColumnName2 ...] FROM [[DatabaseName.]SchemaName.]TableName ColumnName [, [TableName.]ColumnName2 ...]

  • جلو >

اگر مطالب office-menu.ru به شما کمک کرد، لطفاً از پروژه حمایت کنید تا بتوانم آن را بیشتر توسعه دهم.

عبارت ORDER BY در اکسس، رکوردهای برگردانده شده توسط یک پرس و جو را به ترتیب صعودی یا نزولی مقادیر فیلد(های) مشخص شده مرتب می کند.

نحو

انتخاب کنید فیلد_لیست
از جانب جدول
جایی که انتخاب_شرایط
[, میدان 2 ][, ...]]]

عبارت SELECTحاوی بند ORDER BY شامل عناصر زیر است:

یادداشت

بند ORDER BY اختیاری است. زمانی که نیاز به نمایش داده ها به شکل مرتب شده دارید باید از آن استفاده شود.

ترتیب مرتب سازی پیش فرض صعودی است (A تا Z، 0 تا 9). دو مثال زیر مرتب‌سازی اسامی کارکنان را بر اساس نام خانوادگی نشان می‌دهد.

نام خانوادگی، نام خانوادگی را انتخاب کنید
از کارمندان
سفارش بر اساس نام خانوادگی؛
نام خانوادگی، نام خانوادگی را انتخاب کنید
از کارمندان
سفارش بر اساس نام خانوادگی ASC;

برای مرتب سازی به ترتیب نزولی (از Z تا A، 9 تا 0)، کلمه رزرو شده DESC را در انتهای هر فیلد که می خواهید رکوردها را بر اساس آن مرتب کنید، اضافه کنید. مثال زیر اسامی کارکنان را به ترتیب نزولی حقوق مرتب می کند.

نام خانوادگی، حقوق و دستمزد را انتخاب کنید
از کارمندان
سفارش بر اساس حقوق DESC، نام خانوادگی;

اگر فیلدی را مشخص کنید که حاوی داده های Memo یا اشیاء OLE در عبارت ORDER BY باشد، خطایی رخ می دهد. هسته DBMS دسترسی مایکروسافتمرتب سازی بر اساس این نوع فیلدها را پشتیبانی نمی کند.

عبارت ORDER BY معمولا آخرین عنصر در دستور SQL است.

می توانید فیلدهای اضافی را در بند ORDER BY قرار دهید. رکوردها ابتدا بر اساس فیلدی که ابتدا در عبارت ORDER BY مشخص شده است مرتب می شوند. پس از آن رکوردهایی با همان مقادیر فیلد اول بر اساس فیلد دوم مشخص شده مرتب می شوند و به همین ترتیب.

هنگام بازیابی داده ها، می تواند مهم باشد که آنها را در یک فرم مرتب شده خاص به دست آورید. مرتب سازی را می توان با هر فیلد با هر نوع داده ای انجام داد. این می تواند یک مرتب سازی صعودی یا نزولی برای فیلدهای عددی باشد. برای فیلدهای کاراکتر (متن) این می تواند مرتب شود به ترتیب حروف الفبا، اگرچه در اصل به ترتیب صعودی یا نزولی نیز مرتب می شود. همچنین می تواند در هر جهت انجام شود - از A تا Z و بالعکس از Z تا A.

ماهیت فرآیند مرتب سازی این است که دنباله را به ترتیب خاصی کاهش دهیم. می‌توانید در مقاله «الگوریتم‌های مرتب‌سازی» درباره مرتب‌سازی اطلاعات بیشتری کسب کنید. برای مثال، مرتب‌سازی یک دنباله اعداد دلخواه به ترتیب صعودی:

2, 4, 1, 5, 9

باید منجر به یک توالی مرتب شود:

1, 2, 4, 5, 6

به همین ترتیب، هنگام مرتب سازی به ترتیب صعودی مقادیر رشته:

ایوانف ایوان، پتروف پتر، ایوانف آندری

نتیجه باید این باشد:

ایوانف آندری، ایوانف ایوان، پتروف پتروف

در اینجا خط "آندری ایوانف" به آغاز حرکت کرده است، زیرا مقایسه رشته ها کاراکتر به کاراکتر انجام می شود. هر دو خط با شخصیت های مشابه "ایوانف" آغاز می شود. از آنجایی که نماد "A" در کلمه "آندری" در الفبا زودتر از نماد "I" در کلمه "ایوان" آمده است، این خط زودتر قرار خواهد گرفت.

مرتب سازی در پرس و جوی SQL

برای انجام مرتب سازی، باید دستور ORDER BY را به رشته کوئری اضافه کنید. بعد از این دستور فیلدی که مرتب سازی توسط آن انجام می شود نشان داده می شود.

به عنوان مثال، ما از کالاهای جدول کالا استفاده می کنیم:

تعداد
(شماره مورد)
عنوان
(نام)
قیمت
(قیمت)
1 ماندارین50
2 هندوانه120
3 یک آناناس80
4 موز40

داده های اینجا قبلاً با ستون "num" مرتب شده اند. حال، بیایید یک پرس و جو بسازیم که جدولی را با محصولات مرتب شده به ترتیب حروف الفبا نمایش دهد:

انتخاب کنید * سفارش کالا بر اساس عنوان

SELECT * FROM goods – انتخاب تمام فیلدها از جدول کالاها را مشخص می کند.

ORDER BY – دستور مرتب سازی.

عنوان - ستونی که مرتب سازی توسط آن انجام می شود.

نتیجه اجرای چنین درخواستی به شرح زیر است:

تعداد عنوان قیمت
3 یک آناناس80
2 هندوانه120
4 موز40
1 ماندارین50

همچنین می توانید برای هر یک از فیلدهای جدول مرتب کنید.

جهت مرتب سازی

به طور پیش فرض، دستور ORDER BY به ترتیب صعودی مرتب می شود. برای کنترل دستی جهت مرتب سازی، از کلمه کلیدی ASC (صعودی) یا DESC (نزولی) بعد از نام ستون استفاده کنید. بنابراین، برای نمایش جدول ما به ترتیب نزولی قیمت ها، باید پرس و جو را به صورت زیر بپرسید:

انتخاب کنید * از کالاها سفارش بر اساس قیمت DESC

مرتب سازی بر اساس قیمت صعودی خواهد بود:

انتخاب کنید * از کالاها سفارش بر اساس قیمت ASC

مرتب سازی بر اساس چندین فیلد

SQL امکان مرتب سازی بر اساس چندین فیلد را به طور همزمان فراهم می کند. برای انجام این کار، پس از دستور ORDER BY، فیلدهای مورد نیاز با کاما از هم جدا شده اند. ترتیب نتیجه پرس و جو به همان ترتیبی که فیلدهای مرتب سازی مشخص شده اند پیکربندی می شود.

ستون 1 ستون 2 ستون 3
3 1 ج
1 3 ج
2 2 ب
2 1 ب
1 2 آ
1 3 آ
3 4 آ

بیایید جدول را طبق قوانین زیر مرتب کنیم:

انتخاب کنید * از mytable ORDER BY ستون1 ASC، ستون2 DESC، ستون3 ASC

آن ها ستون اول صعودی، دوم نزولی، سوم دوباره صعودی است. پرس و جو سطرها را بر اساس ستون اول و سپس بدون شکستن قانون اول، توسط ستون دوم مرتب می کند. سپس نیز بدون تخطی از قوانین موجود طبق ثالث. نتیجه یک مجموعه داده مانند زیر خواهد بود:

ستون 1 ستون 2 ستون 3
1 3 آ
1 3 ج
1 2 آ
2 2 ب
2 1 ب
3 1 آ
3 1 ج

ترتیب دستور ORDER BY در یک پرس و جو

مرتب سازی ردیف ها اغلب همراه با شرطی برای انتخاب داده ها انجام می شود. دستور ORDER BY بعد از شرط انتخاب WHERE قرار می گیرد. به عنوان مثال، ما محصولاتی را با قیمت کمتر از 100 روبل انتخاب می کنیم که بر اساس نام به ترتیب حروف الفبا مرتب شده اند:

انتخاب کنید * از کالاهایی که قیمت 100سفارش بر اساس قیمت ASC

اغلب نیاز به نمایش نتیجه یک پرس و جو به ترتیب خاصی، به عنوان مثال، بر اساس حروف الفبا وجود دارد. برای این منظور، DBMS دارای یک عملکرد ویژه در زبان SQL - مرتب سازی است. در این صورت برنامه نویس می تواند بدون استفاده از مهارت های برنامه نویسی جدی، انتخاب کند که کدام زمینه ها و به چه ترتیبی رخ دهد تا به نتیجه دلخواه برسد.

مرتب سازی در پایگاه داده چیست؟

کار با پایگاه های داده به طور مداوم با حجم زیادی از اطلاعات مرتبط است که باید سازماندهی شوند. در حال حاضر، تعدادی DBMS با طیف گسترده ای از عملکردها وجود دارد که محبوب ترین آنها Oracle و MS SQL هستند. مرتب سازی اطلاعات، به عنوان یکی از رویه های اصلی در کار با پایگاه های داده، توسط یک تابع داخلی خاص در هر یک از آنها ارائه می شود.

رتبه بندی داده ها به شما امکان می دهد فرآیند جستجو را ساده کنید و در برخی موارد به حل مشکلات خاص یا بهینه سازی عملکرد برنامه کمک می کند. مرتب سازی SQL توسط یک فیلد جداگانه انتخاب شده انجام می شود و در صورت لزوم، در صورت وجود مقادیر یکسان در عناصر این فیلد، می توانید پارامترهای اضافی را تعیین کنید که مکان ردیف ها را تعیین می کند.

دستور مرتب سازی

مرتب سازی SQL در پایگاه داده با استفاده از تابع ORDER BY ارائه می شود. بنابراین هنگام خروجی اطلاعات از پایگاه داده، پس از تعیین ستون ها و جداولی که خواندن از آن ها انجام می شود، کوئری باید دستور مرتب سازی را مشخص کند و سپس فیلد یا فیلدهایی را که مرتب سازی انجام می شود مشخص کند.

به عنوان مثال، اگر شما نیاز به دریافت داده‌ها از فیلدهای Name و Age از جدول افراد دارید، در حالی که نتیجه را به ترتیب حروف الفبا بر اساس ستون Name نمایش می‌دهید، پرسش زیر به شما کمک می‌کند: نام، سن را از افراد سفارش بر اساس نام انتخاب کنید.

چگونه ترتیب مرتب سازی را تنظیم کنیم؟

شرایط مدرن وظایف مختلفی را برای برنامه نویسان ایجاد می کند، و گاهی اوقات لازم است از قبل تعیین شود که نتیجه به چه ترتیبی نمایش داده می شود - به ترتیب نزولی یا صعودی، به ترتیب حروف الفبا یا به ترتیب معکوس؟ و برای انجام این کار در SQL، ترتیب مرتب سازی با افزودن یک کلمه کلیدی به پرس و جو تعیین می شود. پس از انتخاب فیلدها و جداولی که اطلاعات مورد نظر از آنها به دست می آید، باید ORDER BY را اضافه کنید و سپس نام ستونی را که می خواهید بر اساس آن مرتب کنید، مشخص کنید.

برای بدست آوردن ترتیب معکوس، باید پارامتر DESC را بعد از نام مشخص کنید. در صورت نیاز به ترتیب عناصر بر اساس دو یا چند معیار، ستون‌ها با کاما از هم جدا شده‌اند و اولویت در رتبه‌بندی با فیلدی است که در لیست قرار می‌گیرد. شایان ذکر است که پارامتر DESC ترتیب عناصر را به ترتیب معکوس فقط در یک فیلد فراهم می کند که پس از نام آن این کلمه کلیدی مشخص شده است، بنابراین در صورت لزوم باید در تمام ستون های انتخاب شده مشخص شود.

روش های مرتب سازی جایگزین

اگر امکان استفاده از تابع مرتب سازی داخلی SQL وجود ندارد، می توانید یکی از الگوریتم های شناخته شده را بنویسید. اگر نیاز به دستیابی به سریعترین ترتیب عناصر دارید، باید از روشی بر اساس تقسیم آرایه عناصر به نصف استفاده کنید. همچنین روش های رتبه بندی "حباب" بسیار محبوب هستند که در آن دو عناصر همسایهدر صورت قرارگیری نادرست مکان‌ها را تعویض کنید، «مرتب‌سازی هرمی» که بزرگ‌ترین عنصر را به انتهای فهرست می‌فرستد، و «مرتب‌سازی درج» که مکان هر عنصر را به نوبه خود از قبل تعیین می‌کند.

نوشتن یک الگوریتم به طور قابل توجهی سرعت مرتب سازی را افزایش نمی دهد، با این حال، به توسعه مهارت های برنامه نویسی کمک می کند، و همچنین به شما این امکان را می دهد که با تنظیم طرح رتبه بندی به یک پایگاه داده خاص، فرآیند را تغییر دهید تا کارایی برنامه بهبود یابد.

در آینده، ممکن است لازم باشد انتخاب خود را مرتب کنیم - بر اساس حروف الفبا برای متن یا صعودی/نزولی برای مقادیر عددی. برای چنین اهدافی در SQLوجود دارد اپراتور ویژه سفارش توسط .

1. مرتب سازی داده های انتخاب شده.

بیایید کل جدول خود را بر اساس میزان فروش محصول، یعنی بر اساس ستون، مرتب کنیم میزان.

انتخاب کنید * از مجموع سفارش بر اساس مقدار

می بینیم که query رکوردها را به ترتیب صعودی در فیلد مرتب کرده است میزان. پیروی از دنباله عملگرها ضروری است، یعنی. اپراتور سفارش توسط باید در انتهای درخواست بروید. در غیر این صورت یک پیغام خطا دریافت خواهید کرد.

همچنین یکی از ویژگی های اپراتور سفارش توسط این است که می تواند داده ها را بر اساس فیلدی که ما در پرس و جو انتخاب نکرده ایم مرتب کند، یعنی کافی است که اصلاً در پایگاه داده باشد.

2. مرتب سازی بر اساس چندین فیلد.

حالا بیایید مثال خود را بر اساس یک فیلد دیگر مرتب کنیم. بگذار یک میدان باشد شهر، که محل فروش محصولات را نمایش می دهد.

انتخاب کنید * از سفارش جمع محصول بر اساس مقدار، شهر

ترتیب مرتب سازی به ترتیب فیلدهای درخواست بستگی دارد. یعنی در مورد ما ابتدا داده ها بر اساس ستون مرتب می شوند میزان، و سپس توسط شهر.

3. جهت مرتب سازی.

حتی اگر اپراتور پیش فرض سفارش توسط مرتب سازی به ترتیب صعودی، همچنین می توانیم مقادیر مرتب سازی را به ترتیب نزولی مشخص کنیم. برای این کار در انتهای هر فیلد عملگر را قرار می دهیم DESC (که مخفف کلمه است نزولی).

انتخاب کنید * از مجموع محصول سفارش بر اساس مبلغ DESC، شهر

که در در این مثال، ارزش در زمینه میزانبه ترتیب نزولی و در میدان مرتب شدند شهر- صعودی اپراتور DESC فقط برای یک ستون اعمال می شود، بنابراین در صورت لزوم، باید بعد از هر قسمتی که در مرتب سازی شرکت می کند، نوشته شود.