English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

جملة ORDER BY في SQL

في هذا الدرس، ستعلم كيفية ترتيب البيانات المعدة من استعلام SELECT SQL.

ترتيب النتائج

عادةً، عندما تستخدم جملة SELECT للحصول على بيانات من الجدول، لا يوجد ترتيب محدد للسطور في النتائج. إذا كنت ترغب في ترتيب النتائج بناءً على ترتيب معين، يمكنك تضمين جملة ORDER BY في نهاية الجملة، والتي تخبر البرنامج كيفية ترتيب البيانات المعدة من الاستعلام. الترتيب الافتراضي هو الترتيب الارتفاعي.

النحو

جملة ORDER BY تستخدم لترتيب البيانات المعدة من الاستعلام. يمكن تقديم صيغة الأساس للجملة عبر الطريقة التالية:

SELECT column_list FROM table_name ORDER BY column_name ASC|DESC;

في هذا السياق،column_listهي جدول البيانات الذي نريد الحصول على قيمته.الاسم،العمر،البلدوالمجالات/الحقول مثلالاسم، وcolumn_nameهو اسم العمود الذي نريد ترتيبه.

تأمل في أن لدينا في قاعدة بياناتناemployeesالجدول، والذي يحتوي على السجلات التالية:

+--------+--------------+------------+--------+---------+
| emp_id | emp_name | hire_date | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      1 | Ethan Hunt   | 2001-05-01 |   5000 |       4 |
|      2 | Tony Montana | 2002-07-15 |   6500 |       1 |
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
|      5 | Martin Blank | 2008-06-24 |   5600 |    NULL |
+--------+--------------+------------+--------+---------+

ترتيب عمودي

الجملة SQL التالية ستقومemployeesيظهر في الجدول جميع الموظفين، وترتبهمemp_nameترتيب السلسلة الارتفاعي للنتائج.

SELECT * FROM employees 
ORDER BY emp_name ASC;

يمكنك تجاوز خيار ASC واستخدام الجملة التالية فقط. إنها تعود بنفس النتائج كالجملة السابقة لأن ترتيب SQL الافتراضي هو الترتيب الارتفاعي:

SELECT * FROM employees 
ORDER BY emp_name;

بعد تنفيذ الأمر المسبق، ستحصل على النتيجة التالية:

+--------+--------------+------------+--------+---------+
| emp_id | emp_name | hire_date | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      1 | Ethan Hunt   | 2001-05-01 |   5000 |       4 |
|      5 | Martin Blank | 2008-06-24 |   5600 |    NULL |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
|      2 | Tony Montana | 2002-07-15 |   6500 |       1 |
+--------+--------------+------------+--------+---------+

بالمثل، يمكنك استخدام خيار DESC للترتيب التنازلي. الجملة التالية سترتب الأرقامالراتبنتائج الترتيب التنازلي للسلسلة (salary).

SELECT * FROM employees 
ORDER BY salary DESC;

هذا المرة، ستحصل على النتائج التالية:

+--------+--------------+------------+--------+---------+
| emp_id | emp_name | hire_date | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
|      2 | Tony Montana | 2002-07-15 |   6500 |       1 |
|      5 | Martin Blank | 2008-06-24 |   5600 |    NULL |
|      1 | Ethan Hunt   | 2001-05-01 |   5000 |       4 |
+--------+--------------+------------+--------+---------+

ترتيب عدة أعمدة

يمكنك أيضًا تحديد عدة أعمدة للترتيب. ولكن، إلا إذا كانت هناك قيم مكررة في الجدول، فإن تغيير مجموعة النتائج غير مرئي. حسنًا، دعونا نجد:

للتفهم أفضل ترتيب عدة أعمدة، لنفترض أن لدينا قاعدة بيانات تحتوي على جدول يُدعىTraineesجدول، يحتوي على السجلات التالية:

+----+------------+------------+-------------+--------+
| id | first_name | last_name  | birth_date  | gender |
+----+------------+------------+-------------+--------+
|  1 | Peter      | Parker      | 1998-03-04  |  M      |
|  2 | Harry      | Potter     | 2001-08-30  |  M     |
|  3 | Peter      | Pan        | 2004-09-19  |  M     |
|  4 | Alice      | Kingsleigh | 1999-07-02  |  F     |
|  5 | John       | Connor     | 2002-01-15  |  M     |
+----+------------+------------+-------------+--------+

إذا نظرت بعناية إلى الجدول، ستلاحظ أن لدينا بعض القيم المكررة. ولكن، يوجد بين المتدربين Peter Parker و Peter Pan اختلاف في الأسماء الكاملة، ولكن الأسماء نفسها.

الآن قم بتنفيذ الأمر التالي، الأمر ينفذ وفقًا لـfirst_nameعلى مجموعة النتائج تنفيذترتيب.

SELECT * FROM trainees 
ORDER BY first_name;

بعد التنفيذ، ستحصل على النتيجة التالية:

+----+------------+------------+-------------+--------+
| id | first_name | last_name  | birth_date  | gender |
+----+------------+------------+-------------+--------+
|  4 | Alice      | Kingsleigh | 1999-07-02  |  F     |
|  2 | Harry      | Potter     | 2001-08-30  |  M     |
|  5 | John       | Connor     | 2002-01-15  |  M     |
|  1 | Peter      | Parker      | 1998-03-04  |  M      |
|  3 | Peter      | Pan        | 2004-09-19  |  M     |
+----+------------+------------+-------------+--------+

الآن قم بتنفيذ هذه الجملة، الجملة تنفذ وفقًا لـfirst_nameوlast_nameعلى مجموعة النتائج تنفيذترتيب.

SELECT * FROM trainees 
ORDER BY first_name, last_name;
+----+------------+------------+-------------+--------+
| id | first_name | last_name  | birth_date  | gender |
+----+------------+------------+-------------+--------+
|  4 | Alice      | Kingsleigh | 1999-07-02  |  F     |
|  2 | Harry      | Potter     | 2001-08-30  |  M     |
|  5 | John       | Connor     | 2002-01-15  |  M     |
|  3 | Peter      | Pan        | 2004-09-19  |  M     |
|  1 | Peter      | Parker      | 1998-03-04  |  M      |
+----+------------+------------+-------------+--------+

هل لاحظت الفرق بين مجموعة النتائج السابقة ومجموعة النتائج الحالية - هذه المرة، سجل المتدرب "Peter Parker" يأتي بعد "Peter Pan".

بسبب أن أسماء المتدربين الاثنين هما "Peter"، لذا في هذين المتدربينlast_nameيتم ترتيب العمود الثاني على مستوى الترتيب الثانوي، لذا فإن سجلات المتدربين الذين يحملون الاسم "Peter Parker" تأتي بعد "Peter Pan".

ملاحظة:عند تحديد عدة سلسلة مرتبة، يتم ترتيب مجموعة النتائج أولاً بناءً على السلسلة الأولى، ثم يتم ترتيب القائمة المرتبة بناءً على السلسلة الثانية، وهكذا.