اطلب حسب MySQLاستعلام ASC و DESC مع مثال
⚡ ملخص ذكي
اطلب حسب MySQL يُرتب نتائج الاستعلام تصاعديًا أو تنازليًا باستخدام الكلمتين المفتاحيتين ASC وDESC. تشرح الأقسام التالية الصيغة، والفرز أحادي العمود ومتعدد الأعمدة، ووضع القيم الفارغة، وأمثلة عملية مُنفذة على قاعدة بيانات myflixdb النموذجية.

ما هو الطلب حسب في MySQL?
MySQL ترتيب حسب تُستخدم عبارة SELECT مع استعلام SELECT لفرز البيانات بطريقة منظمة. MySQL تقوم عبارة ORDER BY بترتيب مجموعة نتائج الاستعلام إما بترتيب تصاعدي أو تنازلي، على عمود واحد أو على عدة أعمدة في وقت واحد.
عند استخدام أمر SELECT بمفرده، تُعاد الصفوف بالترتيب الذي يقرأه محرك التخزين، وهو ترتيب غير مضمون. الفرز هو ببساطة إعادة ترتيب هذه الصفوف وفق تسلسل محدد. ويمكن تطبيقه على أنواع البيانات الرقمية والنصية والتاريخية على حد سواء.
MySQL صيغة الترتيب حسب
قبل النظر إلى الأمثلة، من المفيد معرفة مكان وجود الشرط داخل عبارة SELECT كاملة.
SELECT statement... [WHERE condition | GROUP BY `field_name(s)` HAVING condition] ORDER BY `field_name(s)` [ASC | DESC];
هنا
- "اختيار البيان... " هو استعلام التحديد العادي.
- " | " يمثل بدائل.
- "[شرط الشرط | تجميع حسب `اسم_الحقل(ات)` مع وجود الشرط]" الشرط الاختياري المستخدم لتصفية مجموعة نتائج الاستعلام.
- "ترتيب حسب" يقوم بفرز مجموعة نتائج الاستعلام.
- “[ASC | DESC]" تُستخدم الكلمة المفتاحية لترتيب مجموعة النتائج إما تصاعديًا أو تنازليًا. لاحظ أن ASC هو الافتراضي.
ما هي الكلمات الرئيسية DESC وASC؟
يُعدّ كلٌّ من ASC و DESC اتجاهي الفرز اللذين تقبلهما عبارة ORDER BY. يقارن الجدول أدناه بينهما عبر أنواع البيانات التي ستستخدمها للفرز في أغلب الأحيان.
ASC هو الشكل القصير للصاعد |
MySQL DESC هو الشكل القصير للتنازلي |
|---|---|
| يتم استخدامه لفرز نتائج الاستعلام بأسلوب من أعلى إلى أسفل. | تُستخدم هذه الخاصية لفرز نتائج الاستعلام من الأسفل إلى الأعلى. |
| عند العمل على أنواع بيانات التاريخ، يظهر التاريخ الأقدم أعلى القائمة. | عند العمل على أنواع بيانات التاريخ، يتم عرض أحدث تاريخ في أعلى القائمة. |
| عند التعامل مع أنواع البيانات الرقمية، تظهر القيم الأدنى في أعلى القائمة. | عند العمل مع أنواع البيانات الرقمية، تظهر أعلى القيم في أعلى مجموعة نتائج الاستعلام. |
| عند العمل مع أنواع بيانات السلسلة، يتم فرز مجموعة نتائج الاستعلام من تلك التي تبدأ بالحرف A وصولاً إلى الحرف Z. | عند العمل مع أنواع بيانات السلسلة، يتم فرز مجموعة نتائج الاستعلام من تلك التي تبدأ بالحرف Z نزولاً إلى الحرف A. |
تُستخدم كل من الكلمات المفتاحية SQL DESC و ASC بالتزامن مع عبارة SELECT و MySQL ORDER BY جملة.
صيغة DESC و ASC
تحتوي كلمة الترتيب SQL DESC على بناء الجملة الأساسي التالي.
SELECT {fieldName(s) | *} FROM tableName(s) [WHERE condition] ORDER BY fieldname(s) ASC | DESC [LIMIT N];
هنا
- حدد {اسم الحقل (الأسماء) | *} من اسم (أسماء) الجدول هو البيان الذي يحتوي على الحقول والجداول التي سيتم الحصول منها على مجموعة النتائج.
- [أين الشرط] يعد اختياريًا ولكن يمكن استخدامه لتصفية البيانات وفقًا للحالة المحددة.
- ترتيب النتائج حسب اسم (أسماء) الحقل يُعدّ هذا الحقل إلزاميًا، ويُحدد اسم الحقل الذي يتمّ فرز البيانات بناءً عليه. MySQL تحدد الكلمة المفتاحية DESC أن الفرز يتم بترتيب تنازلي.
- [الحد الأقصى N] هذا الخيار اختياري، ولكن يمكن استخدامه للحد من عدد الصفوف التي يتم إرجاعها من مجموعة نتائج الاستعلام.
لماذا نستخدم DESC و ASC في MySQL?
إن معرفة الصيغة ليست سوى نصف الحقيقة. فسبب وجود عبارة ORDER BY هو أن مجموعة النتائج التي يسهل على قاعدة البيانات إنتاجها لا يسهل على الشخص قراءتها دائمًا.
لنفترض أنك تطبع سجل مدفوعات أحد أعضاء مكتبة الفيديو لتمكين موظفي الاستقبال من الرد على الاستفسارات بسرعة. من المنطقي أكثر طباعة المدفوعات بترتيب زمني تنازلي، بدءًا من أحدث دفعة وصولًا إلى أقدمها. في هذه الحالة، تُعدّ كلمة DESC في لغة SQL مفيدة للغاية، إذ يُمكن فرز القائمة حسب تاريخ الدفع.
لنفترض الآن أن قسم التسويق يريد قائمة بالأفلام مصنفة حسب الفئة، حتى يتمكن الأعضاء من الاطلاع على العناوين المتوفرة في المكتبة قبل استئجارها. يتيح ترتيب أسماء الفئات وعناوين الأفلام تصاعديًا للأعضاء البحث عن المعلومات بسرعة، تمامًا كما يفعلون في الفهرس. وتؤدي الكلمة المفتاحية ASC هذا الغرض.
باختصار، تقوم عبارة ORDER BY بتحويل مجموعة النتائج الأولية إلى تقرير. وتعتمد الكلمة المفتاحية التي تختارها على السؤال الذي يطرحه القارئ. ما الذي حدث مؤخراً؟ يدعو إلى استخدام نظام DESC، بينما أين أجد هذا المنتج؟ يدعو إلى ASC.
MySQL مثال على الترتيب حسب
جميع الأمثلة التالية تُطبّق على قاعدة بيانات myflixdb التجريبية. ابدأ بجدول الأعضاء غير المرتب، والذي يُعاد بترتيبه الافتراضي.
SELECT * FROM members;
تنفيذ البرنامج النصي أعلاه في MySQL يعطينا برنامج Workbench عند استخدامه مع قاعدة بيانات myflixdb النتائج التالية الموضحة أدناه.
| رقم العضوية | الأسماء الكاملة | جنس | تاريخ الميلاد | العنوان الفعلي | العنوان البريدي | رقم الاتصال | البريد الإلكتروني |
|---|---|---|---|---|---|---|---|
| 1 | جانيت جونز | أنثى | 21-07-1980 | الشارع الأول قطعة رقم 4 | حقيبة خاصة | 0759-253-542 | جانيتجونز@yagoo.cm |
| 2 | جانيت سميث جونز | أنثى | 23-06-1980 | ميلروز 123 | اغية | اغية | jj@fstreet.com |
| 3 | روبرت فيل | ذكر | 12-07-1989 | الشارع الثالث 3 | اغية | 12345 | rm@tstreet.com |
| 4 | غلوريا ويليامز | أنثى | 14-02-1984 | الشارع الثاني 2 | اغية | اغية | اغية |
| 5 | ليونارد هوفستاتر | ذكر | اغية | وودكريست | اغية | 845738767 | اغية |
| 6 | شيلدون كوبر | ذكر | اغية | وودكريست | اغية | 976736763 | اغية |
| 7 | راجيش كوثرابالي | ذكر | اغية | وودكريست | اغية | 938867763 | اغية |
| 8 | ليزلي وينكل | ذكر | 14-02-1984 | وودكريست | اغية | 987636553 | اغية |
| 9 | هوارد ولويتز | ذكر | 24-08-1981 | ساوث بارك | صندوق بريد P.O. Box 4563 | 987786553 | اغية |
الترتيب تنازليًا باستخدام DESC
لنفترض أن قسم التسويق يرغب في ترتيب بيانات الأعضاء تنازليًا حسب تاريخ الميلاد. يساعد هذا الفريق على إرسال تهاني أعياد الميلاد في الوقت المناسب. يتم إنشاء القائمة بواسطة الاستعلام أدناه.
SELECT * FROM members ORDER BY date_of_birth DESC;
تنفيذ البرنامج النصي أعلاه في MySQL يعطينا برنامج Workbench عند استخدامه مع قاعدة بيانات myflixdb النتائج التالية الموضحة أدناه.
الترتيب تصاعديًا باستخدام ASC
نفس الاستعلام بترتيب تصاعدي يقوم ببساطة بتبديل الكلمة الرئيسية.
SELECT * FROM members ORDER BY date_of_birth ASC;
ملاحظة: القيمة NULL تعني عدم وجود قيمة على الإطلاق، وهذا يختلف عن الصفر أو السلسلة النصية الفارغة. لاحظ في كلتا لقطتي الشاشة كيف يتم تجميع التواريخ ذات القيمة NULL معًا: MySQL يعامل NULL على أنه أقل من أي قيمة أخرى، لذلك تظهر صفوف NULL أولاً تحت ASC وأخيراً تحت DESC.
كيفية الفرز حسب أعمدة متعددة في MySQL
يُجيب الفرز بناءً على عمود واحد على أسئلة بسيطة. عادةً ما تحتاج التقارير إلى مستوى ثانٍ من الترتيب، ويقبل الأمر ORDER BY قائمة حقول مفصولة بفواصل لهذا الغرض تحديدًا.
ضع في اعتبارك نص SQL التالي لفرز البيانات والذي يسرد جميع سجلات الأعضاء دون أي توجيه صريح.
SELECT * FROM `members`;
يؤدي تنفيذ البرنامج النصي أعلاه إلى الحصول على النتائج التالية الموضحة أدناه.
| رقم العضوية | الأسماء الكاملة | جنس | تاريخ الميلاد | العنوان الفعلي | العنوان البريدي | رقم الاتصال | البريد الإلكتروني |
|---|---|---|---|---|---|---|---|
| 1 | جانيت جونز | أنثى | 21-07-1980 | الشارع الأول قطعة رقم 4 | حقيبة خاصة | 0759-253-542 | جانيتجونز@yagoo.cm |
| 2 | جانيت سميث جونز | أنثى | 23-06-1980 | ميلروز 123 | اغية | اغية | jj@fstreet.com |
| 3 | روبرت فيل | ذكر | 12-07-1989 | الشارع الثالث 3 | اغية | 12345 | rm@tstreet.com |
| 4 | غلوريا ويليامز | أنثى | 14-02-1984 | الشارع الثاني 2 | اغية | اغية | اغية |
| 5 | ليونارد هوفستاتر | ذكر | اغية | وودكريست | اغية | 845738767 | اغية |
| 6 | شيلدون كوبر | ذكر | اغية | وودكريست | اغية | 976736763 | اغية |
| 7 | راجيش كوثرابالي | ذكر | اغية | وودكريست | اغية | 938867763 | اغية |
| 8 | ليزلي وينكل | ذكر | 14-02-1984 | وودكريست | اغية | 987636553 | اغية |
| 9 | هوارد ولويتز | ذكر | 24-08-1981 | ساوث بارك | صندوق بريد P.O. Box 4563 | 987786553 | اغية |
فرز عمود واحد حسب الترتيب الافتراضي
لنفترض أننا نريد قائمة تُرتّب نتائج الاستعلام حسب حقل الجنس. يقوم البرنامج النصي أدناه بذلك دون تحديد اتجاه الترتيب.
SELECT * FROM `members` ORDER BY `gender`;
| رقم العضوية | الأسماء الكاملة | جنس | تاريخ الميلاد | العنوان الفعلي | العنوان البريدي | رقم الاتصال | البريد الإلكتروني |
|---|---|---|---|---|---|---|---|
| 1 | جانيت جونز | أنثى | 21-07-1980 | الشارع الأول قطعة رقم 4 | حقيبة خاصة | 0759-253-542 | جانيتجونز@yagoo.cm |
| 2 | جانيت سميث جونز | أنثى | 23-06-1980 | ميلروز 123 | اغية | اغية | jj@fstreet.com |
| 4 | غلوريا ويليامز | أنثى | 14-02-1984 | الشارع الثاني 2 | اغية | اغية | اغية |
| 3 | روبرت فيل | ذكر | 12-07-1989 | الشارع الثالث 3 | اغية | 12345 | rm@tstreet.com |
| 5 | ليونارد هوفستاتر | ذكر | اغية | وودكريست | اغية | 845738767 | اغية |
| 6 | شيلدون كوبر | ذكر | اغية | وودكريست | اغية | 976736763 | اغية |
| 7 | راجيش كوثرابالي | ذكر | اغية | وودكريست | اغية | 938867763 | اغية |
| 8 | ليزلي وينكل | ذكر | 14-02-1984 | وودكريست | اغية | 987636553 | اغية |
| 9 | هوارد ولويتز | ذكر | 24-08-1981 | ساوث بارك | صندوق بريد P.O. Box 4563 | 987786553 | اغية |
يتم عرض الأعضاء "الإناث" أولاً، يليهم الأعضاء "الذكور". وذلك لأنه عند استخدام عبارة ORDER BY دون تحديد ASC أو MySQL كلمة مفتاحية للوصف، MySQL يقوم بترتيب مجموعة نتائج الاستعلام بترتيب تصاعدي افتراضياً.
فرز عمودين في اتجاهين متعاكسين
لنلقِ نظرة الآن على مثال يقوم بـ الفرز باستخدام عمودينالعمود الأول هو فرز in ترتيب تصاعدي افتراضياً، بينما العمود الثاني هو فرز in تنازليا.
SELECT * FROM `members` ORDER BY `gender`, `date_of_birth` DESC;
تنفيذ البرنامج النصي أعلاه في MySQL يعطي برنامج Workbench النتائج التالية عند استخدامه مع قاعدة بيانات myflixdb.
تم فرز عمود الجنس تصاعديًا افتراضيًا، بينما تم فرز عمود تاريخ الميلاد تنازليًا بشكل صريح. ينطبق كل اتجاه على العمود الذي يليه فقط.
كيفية دمج عبارة ORDER BY مع عبارات WHERE وLIMIT وGROUP BY
نادراً ما تكون عبارة ORDER BY هي الشرط الوحيد في استعلام الإنتاج. MySQL يقوم دائماً بتقييم البنود بتسلسل ثابت، ومعرفة هذا التسلسل يفسر سبب ظهور النتائج بالشكل الذي تبدو عليه.
- من عند يقرأ الصفوف من الجدول.
- WHERE يتجاهل الصفوف التي لا تستوفي الشرط.
- GROUP BY يقوم بدمج الصفوف المتبقية في مجموعات، ويقوم HAVING بتصفية تلك المجموعات.
- ترتيب حسب قم بتسلسل الصفوف المتبقية.
- مما سيحدث يقوم بحذف العدد المطلوب من الصفوف من القائمة المصنفة.
لأن عبارة ORDER BY تعمل بعد WHERE و GROUP BY ولكن قبل LIMIT، فإن استعلامًا مثل "أصغر خمسة أعضاء من وودكريست" يتم التعبير عنه في عبارة واحدة.
SELECT full_names, date_of_birth FROM members WHERE physical_address = 'Woodcrest' ORDER BY date_of_birth DESC LIMIT 5;
ينطبق الترتيب نفسه على النتائج المجمعة. القيم الإجمالية الناتجة عن وظائف مجمعة يمكن فرز البيانات مثل COUNT، بحيث ترتفع الفئة الأكثر ازدحامًا إلى أعلى التقرير.
SELECT gender, COUNT(*) AS members_count FROM members GROUP BY gender ORDER BY members_count DESC;
تلميح: يمكن استخدام عبارة ORDER BY للفرز حسب اسم مستعار للعمود، أو حسب تعبير، أو حتى حسب موضع العمود، مثل ORDER BY 3. لكن الفرز حسب الموضع غير مستقر، لأن إضافة عمود جديد إلى قائمة SELECT تُغير مفتاح الفرز تلقائيًا. لذا، يُنصح بتسمية العمود بدلًا من ذلك.
هناك نقطة أداء واحدة جديرة بالتذكر. عندما يحتوي العمود المصنف على فهرس، MySQL يمكن قراءة الصفوف بترتيب الفهرس وتجاوز عملية الفرز تمامًا. بدون فهرس، تُجبر الجداول الكبيرة على فرز الملفات في الذاكرة أو على القرص، وهو السبب المعتاد لبطء استعلام التقرير.

ASC هو الشكل القصير للصاعد
MySQL DESC هو الشكل القصير للتنازلي

