SQLجلب البيانات مع ترتيبها
- مفهوم ترتيب البيانات
- تجهيز قاعدة البيانات التي سنطبق عليها
- أمثلة حول ترتيب البيانات التي يتم جلبها
مفهوم ترتيب البيانات
يمكنك استخدام الكلمة ORDER BY
لترتيب البيانات التي تجلبها بشكل تصاعدي ( Ascending ) أو تنازلي ( Descending ) سواء كنت تتعامل مع بيانات نصية أو رقمية.
طريقة استخدامها
لتحديد الطريقة التي سيتم فيها ترتيب البيانات التي نجلبها بواسطة الأمر SELECT
نضع الكلمة ORDER BY
في نهاية الإستعلام و نضع بعدها إسم العمود أو الأعمدة التي نريد ترتيب السطور على أساسها كما يلي.
SELECT column1, column2, ... FROM table_name ORDER BY column1, column2, ... ASC|DESC;
- بعد الكلمة
SELECT
نضع أسماء الأعمدة التي سيتم إرجاع قيمها في الإستعلام. - مكان الكلمة
table_name
نضع إسم الجدول الذي سنجلب البيانات منه. - بعد الكلمة
ORDER BY
نضع إسم العمود أو الأعمدة التي سيتم ترتيب السطور على أساسها. - في النهاية نضع الكلمة
DESC
إذا أردنا ترتيب البيانات بشكل تنازلي و نضعASC
إذا أردنا ترتيب بشكل تصاعدي.
لست مجبر على وضع الكلمة ASC
إذا كنت ترتيب الأسطر بشكل تصاعدي لأنه أسلوب الترتيب الإفتراضي، أما إذا أردت ترتيب الأسطر بشكل تنازلي فيجب أن تضيف الكلمة DESC
في النهاية.
تجهيز قاعدة البيانات التي سنطبق عليها
قم بتنفيذ الإستعلام التالي حتى تنشئ قاعدة بيانات جديدة إسمها harmash
و تنشئ فيها جدول إسمه employees
يحتوي على بيانات 10 موظفين.
الإستعلام
-- سيتم حذفها harmash في حال كان يوجد بالأساس قاعدة بيانات إسمها DROP DATABASE IF EXISTS harmash; -- harmash هنا قمنا بإنشاء قاعدة بيانات جديدة إسمها CREATE DATABASE harmash; -- harmash هنا قمنا بتحديد أن أي إستعلام جديد سيتم تنفيذه على قاعدة البيانات USE harmash; -- يتألف من ستة أعمدة employees هنا قمنا بإنشاء جدول جديد إسمه -- لأننا قمنا بتحديدها قبل إستدعاء هذا الأمر harmash سيتم إنشاء هذا الجدول بداخل قاعدة البيانات CREATE TABLE employees ( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, first_name VARCHAR(50), last_name VARCHAR(20), is_married BOOLEAN, salary DECIMAL(7,2), birthday Date ); -- هنا قمنا بإضافة 10 أسطر في الجدول, أي أضفنا معلومات 10 موظفين -- لاحظ أننا لم نحدد أسماء الأعمدة التي سنضع فيها البيانات لأننا قمنا بملئ جميع المعلومات -- في البداية هو حتى يكون عدد القيم الموضوعة يساوي عدد أعمدة الجدول null سبب وضع الكلمة -- ستقوم قاعدة البيانات بوضع رقم تعرفة مختلف لكل سطر null مكان الكلمة INSERT INTO employees VALUES (null, "Ahmad", "Alhazem", false, 800, "1990-10-23"); INSERT INTO employees VALUES (null, "Rami", "Algharib", false, 750, "1992-05-08"); INSERT INTO employees VALUES (null, "Said", "Alnaja", true, 900, "1988-07-12"); INSERT INTO employees VALUES (null, "Noura", "Jamali", false, 845, "1994-12-04"); INSERT INTO employees VALUES (null, "Amani", "Sarrouf", true, 1000, "1991-10-27"); INSERT INTO employees VALUES (null, "Mhamad", "Harmush", false, 700, "1993-11-12"); INSERT INTO employees VALUES (null, "Ahmad", "Asaadi", true, 850, "1995-03-10"); INSERT INTO employees VALUES (null, "Mostafa", "Shawki", true, 920, "1990-02-14"); INSERT INTO employees VALUES (null, "Jana", "Alkassem", false, 780, "1991-08-12"); INSERT INTO employees VALUES (null, "Houssam", "Zahrani", true, 880, "1985-09-20");
بعد تنفيذ الإستعلام السابق في phpMyAdmin سيتم إنشاء قاعدة البيانات harmash
و إنشاء الجدول employees
بداخلها.
قم بالنقر على إسم قاعدة البيانات harmash
من القائمة اليسرى حتى تبدأ بالتعامل معها و تطبيق ما ستتعلمه في هذا الدرس.
فيما يلي البيانات التي قمنا بإضافتها في الجدول employees
.
id | first_name | last_name | is_married | salary | birthday |
---|---|---|---|---|---|
1 | Ahmad | Alhazem | 0 | 800.00 | 1990-10-23 |
2 | Rami | Algharib | 0 | 750.00 | 1992-05-08 |
3 | Said | Alnaja | 1 | 900.00 | 1988-07-12 |
4 | Noura | Jamali | 0 | 845.00 | 1994-12-04 |
5 | Amani | Sarrouf | 1 | 1000.00 | 1991-10-27 |
6 | Mhamad | Harmush | 0 | 700.00 | 1993-11-12 |
7 | Ahmad | Asaadi | 1 | 850.00 | 1995-03-10 |
8 | Mostafa | Shawki | 1 | 920.00 | 1990-02-14 |
9 | Jana | Alkassem | 0 | 780.00 | 1991-08-12 |
10 | Houssam | Zahrani | 1 | 880.00 | 1985-09-20 |
أمثلة حول ترتيب البيانات التي يتم جلبها
الإستعلام التالي يجلب كل معلومات الموظفين مع ترتيب الأسطر بشكل تصاعدي نسبةً لرواتب الموظفين.
أي سيتم عرض الموظف الذي ينال الراتب الأدنى في الأول و الموظف الذي ينال الراتب الأعلى في الأخير.
المثال الأول
SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول ORDER BY salary; -- salary قم بترتيب الأسطر بشكل تصاعدي على حسب قيمة الحقل
يمكن وضع الكلمة ASC
في نهاية الإستعلام و لكن لا داعي لذلك لأنه إفتراضياً سيتم ترتيبهم بشكل تصاعدي.
SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول ORDER BY salary ASC; -- salary قم بترتيب الأسطر بشكل تصاعدي على حسب قيمة الحقل
النتيجة
id | first_name | last_name | is_married | salary | birthday |
---|---|---|---|---|---|
6 | Mhamad | Harmush | 0 | 700.00 | 1993-11-12 |
2 | Rami | Algharib | 0 | 750.00 | 1992-05-08 |
9 | Jana | Alkassem | 0 | 780.00 | 1991-08-12 |
1 | Ahmad | Alhazem | 0 | 800.00 | 1990-10-23 |
4 | Noura | Jamali | 0 | 845.00 | 1994-12-04 |
7 | Ahmad | Asaadi | 1 | 850.00 | 1995-03-10 |
10 | Houssam | Zahrani | 1 | 880.00 | 1985-09-20 |
3 | Said | Alnaja | 1 | 900.00 | 1988-07-12 |
8 | Mostafa | Shawki | 1 | 920.00 | 1990-02-14 |
5 | Amani | Sarrouf | 1 | 1000.00 | 1991-10-27 |
نلاحظ أنه تم ترتيب جميع الأسطر بشكل تصاعدي بناءاً على القيم الموضوعة في العمود salary
.
الإستعلام التالي يجلب كل معلومات الموظفين مع ترتيب الأسطر بشكل تنازلي نسبةً لرواتب الموظفين.
أي سيتم عرض الموظف الذي ينال الراتب الأعلى في الأول و الموظف الذي ينال الراتب الأدنى في الأخير.
المثال الثاني
SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول ORDER BY salary DESC; -- salary قم بترتيب الأسطر بشكل تنازلي على حسب قيمة الحقل
النتيجة
id | first_name | last_name | is_married | salary | birthday |
---|---|---|---|---|---|
5 | Amani | Sarrouf | 1 | 1000.00 | 1991-10-27 |
8 | Mostafa | Shawki | 1 | 920.00 | 1990-02-14 |
3 | Said | Alnaja | 1 | 900.00 | 1988-07-12 |
10 | Houssam | Zahrani | 1 | 880.00 | 1985-09-20 |
7 | Ahmad | Asaadi | 1 | 850.00 | 1995-03-10 |
4 | Noura | Jamali | 0 | 845.00 | 1994-12-04 |
1 | Ahmad | Alhazem | 0 | 800.00 | 1990-10-23 |
9 | Jana | Alkassem | 0 | 780.00 | 1991-08-12 |
2 | Rami | Algharib | 0 | 750.00 | 1992-05-08 |
6 | Mhamad | Harmush | 0 | 700.00 | 1993-11-12 |
نلاحظ أنه تم ترتيب جميع الأسطر بشكل تنازلي بناءاً على القيم الموضوعة في العمود salary
.
الإستعلام التالي يجلب كل معلومات الموظفين مع ترتيب الأسطر بشكل تصاعدي نسبةً لتاريخ ميلاد الموظفين.
أي سيتم عرض الموظف الأكبر سناً في الأول و الموظف الأصغر سناً في الأخير.
المثال الثالث
SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول ORDER BY birthday; -- birthday قم بترتيب الأسطر بشكل تصاعدي على حسب قيمة الحقل
النتيجة
id | first_name | last_name | is_married | salary | birthday |
---|---|---|---|---|---|
10 | Houssam | Zahrani | 1 | 880.00 | 1985-09-20 |
3 | Said | Alnaja | 1 | 900.00 | 1988-07-12 |
8 | Mostafa | Shawki | 1 | 920.00 | 1990-02-14 |
1 | Ahmad | Alhazem | 0 | 800.00 | 1990-10-23 |
9 | Jana | Alkassem | 0 | 780.00 | 1991-08-12 |
5 | Amani | Sarrouf | 1 | 1000.00 | 1991-10-27 |
2 | Rami | Algharib | 0 | 750.00 | 1992-05-08 |
6 | Mhamad | Harmush | 0 | 700.00 | 1993-11-12 |
4 | Noura | Jamali | 0 | 845.00 | 1994-12-04 |
7 | Ahmad | Asaadi | 1 | 850.00 | 1995-03-10 |
نلاحظ أنه تم ترتيب جميع الأسطر بشكل تصاعدي بناءاً على القيم الموضوعة في العمود birthday
.
الإستعلام التالي يجلب كل معلومات الموظفين مع ترتيب الأسطر بشكل تصاعدي نسبةً لإسم لأسماء الموظفين.
أي سيتم عرض الموظف على حسب الترتيب الأبجدي لأحرف أسمائهم.
المثال الرابع
SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول ORDER BY first_name; -- first_name قم بترتيب الأسطر بشكل تصاعدي على حسب قيمة الحقل
النتيجة
id | first_name | last_name | is_married | salary | birthday |
---|---|---|---|---|---|
1 | Ahmad | Alhazem | 0 | 800.00 | 1990-10-23 |
7 | Ahmad | Asaadi | 1 | 850.00 | 1995-03-10 |
5 | Amani | Sarrouf | 1 | 1000.00 | 1991-10-27 |
10 | Houssam | Zahrani | 1 | 880.00 | 1985-09-20 |
9 | Jana | Alkassem | 0 | 780.00 | 1991-08-12 |
6 | Mhamad | Harmush | 0 | 700.00 | 1993-11-12 |
8 | Mostafa | Shawki | 1 | 920.00 | 1990-02-14 |
4 | Noura | Jamali | 0 | 845.00 | 1994-12-04 |
2 | Rami | Algharib | 0 | 750.00 | 1992-05-08 |
3 | Said | Alnaja | 1 | 900.00 | 1988-07-12 |
نلاحظ أنه تم ترتيب جميع الأسطر بشكل تصاعدي بناءاً على القيم الموضوعة في العمود first_name
.
الإستعلام التالي يجلب كل معلومات الموظفين مع ترتيب الأسطر بشكل تصاعدي نسبةً لإسم الحالة الإجتماعية أولاً (متزوج أم لا) بعدها يتم ترتيبهم من جديد نسبة لراتبهم من الأعلى إلى الأدنى.
أي سيتم عرض الموظف على حسب قيم العمود is_married
بشكل تصاعدي و من ثم قيم العمود salary
بشكل تنازلي.
المثال الخامس
SELECT * FROM employees -- employees أحضر جميع المعلومات المتوفرة في الجدول ORDER BY is_married ASC, salary DESC; -- salary و من ثم ترتيبهم بشكل تنازلي على حسب قيمة الحقل is_married قم بترتيب الأسطر بشكل تصاعدي على حسب قيمة الحقل
النتيجة
id | first_name | last_name | is_married | salary | birthday |
---|---|---|---|---|---|
4 | Noura | Jamali | 0 | 845.00 | 1994-12-04 |
1 | Ahmad | Alhazem | 0 | 800.00 | 1990-10-23 |
9 | Jana | Alkassem | 0 | 780.00 | 1991-08-12 |
2 | Rami | Algharib | 0 | 750.00 | 1992-05-08 |
6 | Mhamad | Harmush | 0 | 700.00 | 1993-11-12 |
5 | Amani | Sarrouf | 1 | 1000.00 | 1991-10-27 |
3 | Said | Alnaja | 1 | 900.00 | 1988-07-12 |
8 | Mostafa | Shawki | 1 | 920.00 | 1990-02-14 |
10 | Houssam | Zahrani | 1 | 880.00 | 1985-09-20 |
7 | Ahmad | Asaadi | 1 | 850.00 | 1995-03-10 |
نلاحظ أنه تم ترتيب جميع الأسطر بشكل تصاعدي بناءاً على القيم الموضوعة في العمود is_married
بشكل تصاعدي أولاً. بعدها تم ترتيب القيم الموضوعة في العمود salary
بشكل تنازلي و لكن تم ترتيبها بداخل كل قسم يملك نفس قيمة is_married
على حدا.
الإستعلام التالي يجلب كل معلومات الموظفين مع ترتيب الأسطر بشكل تصاعدي نسبةً للنص الذي ينتج عن دمج الحقلين first_name
و last_name
.
أي سيتم عرض إسم الموظف و إسم عائلته في حقل واحد و على أساسه سيتم ترتيب الأسطر.
المثال السادس
SELECT -- هنا سنقوم بتحديد أسماء الأعمدة التي سنجلب منها البيانات id AS 'Id', -- Id إلى id هنا قمنا بتغير إسم العامود CONCAT(first_name, ' ', last_name) AS 'Full Name', -- Full Name و وضعهما في عمود إسمه last_name و first_name هنا قمنا بدمج العمودين salary AS 'Salary' -- Salary إلى salary هنا قمنا بتغير إسم العامود FROM employees -- هنا قمنا بتحديد إسم الجدول الذي سنجلب منه المعلومات ORDER BY CONCAT(first_name, ' ', last_name); -- Full Name هنا قمنا بترتيب أسطر الجدول بناءاً على نفس القيم التي سيتم دمجها في الجدول
النتيجة
id | Full Name | salary |
---|---|---|
1 | Ahmad Alhazem | 800.00 |
7 | Ahmad Asaadi | 850.00 |
5 | Amani Sarrouf | 1000.00 |
10 | Houssam Zahrani | 880.00 |
9 | Jana Alkassem | 780.00 |
6 | Mhamad Harmush | 700.00 |
8 | Mostafa Shawki | 920.00 |
4 | Noura Jamali | 845.00 |
2 | Rami Algharib | 750.00 |
3 | Said Alnaja | 900.00 |
نلاحظ أنه تم ترتيب جميع الأسطر بشكل تصاعدي بناءاً على القيم الموضوعة في العمود Full Name
.