SQLتحديد عدد الأسطر الأقصى التي يمكن أن يتم جلبها
- مفهوم تحديد عدد الأسطر التي سيتم إرجاعها
- تجهيز قاعدة البيانات التي سنطبق عليها
- أمثلة حول ترتيب البيانات التي يتم جلبها
مفهوم تحديد عدد الأسطر التي سيتم إرجاعها
عند جلب بيانات سواء ضمن شروط أو بدون أي شروط فإن النتيجة التي ستحصل عليها قد تكون كبيرة جداً بمعنى أنها قد تحتوي على عدد كبير من الأسطر و التي قد لا تحتاجها أصلاً لأنه يكفيك أن تحصل على جزء منها.
في هذا الدرس ستتعلم كيف تحدد عدد الأسطر الأقصى التي قد يرجعها الإستعلام و ستعرف كيف يمكن الإستفادة من هذا الأمر خاصةً مع البيانات الرقمية.
الآن و قبل أن نبدأ, إليك بعض النماذج لأهمية تحديد عدد الأسطر في المشاريع.
السيناريو الأول
في حال أردت جلب بيانات المستخدمين المخزنة في موقع فيسبوك فأنت بذلك ستجلب أكثر من مليار سطر في إستعلام واحد.
جلب هذا العدد من البيانات في وقت واحد أمر مستحيل لأنه يتطلب وقت كبير جداً و مساحة كبيرة لإستيعابه و لهذا يتم تجزئته و إرساله على دفعات. فمثلاً بدلاً من أن تطلب معلومات المليار شخص دفعة واحدة, تجدهم يسمحوا لك بالحصول على معلومات 20 مستخدم على سبيل المثال كلما حاولت عرض المزيد من النتائج.
هذا الأمر يتم تطبيقه في كل المشاريع الأخرى و في أماكن عديدة في المشروع الواحد, فمثلاً موقع يوتيوب تجده يعرض لك أيضاً كمية محددة من الفيديوهات في كل صفحة, و تجده يعرض لك كيمة محددة من التعيلقات تحت كل فيديو مع إمكانية عرض المزيد من التعليقات كلما أردت ذلك.
لا تظن أن هذا الأمر مقتصر فقط على مواقع التواصل الإجتماعي بل حتى في المواقع العادية فمثلاً في قسم مقالات هرمش أيضاً نعرض كمية محددة من المقالات و كمية محددة من التعليقات و ليس كل المقالات أو التعليقات الموضوعة تحت أي مقال دفعة واحدة.
السيناريو الثاني
في حال أراد مدير شركة إرسال 5 موظفين في شركته إلى مهمة تطلب منهم السفر خارج البلاد لعدة أيام أو أشهر.
هنا قد تجد أن المدير سيقرر من يختار من موظفينه لعدة عوامل مثل عمر الموظف المناسب للمهمة, هل يجب أن يكون إمرأة أو رجل أو لا يهم, هل هذا الشخص متزوج أم لا, منصب الشخص في الشركة, شهادة الموظف العلمية, سنوات الخبرة التي يملكها الموظف إلخ..
بعد أن قام المدير بوضع معاير التي يجب أن تتوفر في الموظفين قد يجد 40 شخص تتوفر فيهم هذه المواصفات.
بما أن المدير يحتاج 5 موظفين فقط لهذه المهمة فإنه يحتاج معرفة أول 5 موظفين تتوفر فيهم هذه المعايير حتى يتواصل معهم و يعينهم للمهمة.
معلومة تقنية
عملية إرجاع كمية محددة من الأسطر الموجودة في الجدول تسمى Pagination أو Paging.
إذاً أي موقع تجده على سبيل المثال يعرض لك 10 مقالات مختلفة في كل صفحة, أو معلومات 20 مستخدم مختلف في كل صفحة إلخ.. يطبق ما يسمى Pagination.
تحديد عدد الأسطر الأقصى التي يمكن أن ترجع
لتحديد عدد الأسطر الأقصى التي يمكن أن يرجعها الإستعلام في قواعد بيانات MySQL و SQLite نستخدم الكلمة LIMIT كالتالي.
- بعد الكلمة SELECT نضع أسماء الأعمدة التي سيتم إرجاع قيمها في الإستعلام.
- مكان الكلمة
table_name
نضع إسم الجدول الذي سنجلب البيانات منه. - بعد الكلمة WHERE يمكنك وضع شرط أو أكثر على الأسطر التي تريد أن يتم جلبها.
- في النهاية نضع الكلمة LIMIT و من بعدها نضع رقم أو رقمين لتحديد عدد الأسطر التي سترجع.
بالنسبة للأرقام التي نضعها بعد الكلمة LIMIT:
- في حال قمت بتمرير رقم واحد فقط مثل LIMIT 5, سيتم إعتبار أنك تريد إرجاع 5 أسطر كحد أقصى.
- في حال قمت بتمرير رقمين مثل LIMIT 2,5, سيتم إعتبار أنك تريد إرجاع 5 أسطر كحد أقصى مع الإشارة إلى أنك ستبدأ من السطر رقم 2 من النتيجة التي تم إرجاعها.
إنتبه جيداً, النتيجة التي ترجع يتم إعتبار أول سطر فيها رقمه 0, السطر الثاني الذي يرجع فيها رقمه 1, السطر الثالث الذي يرجع فيها رقمه 2 و هكذا..
إذا كتبت LIMIT 2,5 تعني أنك تريد إرجاع 5 أسطر كحد أقصى إبتداءاً من السطر الثالث في النتيجة.
إختلاف الأوامر بين قواعد البيانات
نود الإشارة إلى أن تحديد عدد الأسطر موجود في كل قواعد البيانات و لكن قد تجد أنهم يستخدموا كلمات أخرى بدلاً من الكلمة LIMIT و إليك بعض الأمثلة:
في قواعد بيانات Access و SQL Server نستخدم الكلمة TOP كالتالي.
في قواعد بيانات ORACLE نستخدم الكلمة ROWNUM كالتالي.
في النهاية, مهما كان نوع قاعدة البيانات التي ستتعامل معها, فكرة تحديد عدد الأسطر التي سيرجعها الإستعلام هي نفسها تماماً.
تجهيز قاعدة البيانات التي سنطبق عليها
قم بتنفيذ الإستعلام التالي حتى تنشئ قاعدة بيانات جديدة إسمها harmash
و تنشئ فيها جدول إسمه employees
يحتوي على بيانات 10 موظفين.
الإستعلام
بعد تنفيذ الإستعلام السابق في 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 |
أمثلة حول ترتيب البيانات التي يتم جلبها
المثال الأول
الإستعلام التالي يجلب معلومات أول ثلاثة موظفين في الجدول.
الإستعلام
في حال أردت وضع رقمين بعد الكلمة LIMIT يمكنك تعديل الإستعلام كالتالي و الحصول على نفس النتيجة.
سنحصل على النتيجة التالية عند تنفيذ الإستعلام.
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 |
المثال الثاني
الإستعلام التالي يجلب معلومات أول ثلاثة موظفين ولدوا عام 1990 أو بعده.
الإستعلام
في حال أردت وضع رقمين بعد الكلمة LIMIT يمكنك تعديل الإستعلام كالتالي و الحصول على نفس النتيجة.
سنحصل على النتيجة التالية عند تنفيذ الإستعلام.
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 |
4 | Noura | Jamali | 0 | 845.00 | 1994-12-04 |
المثال الثالث
الإستعلام التالي يحضر أعلى راتب يتم إعطاؤه للموظف في الشركة.
الحيلة التي سنفعلها هنا للحصول على أعلى راتب هي ترتيب أسطر الجدول بشكل تنازلي ( أي من الأكبر إلى الأصغر ) على أساس الراتب و من ثم نعرض الراتب الموضوع في أول سطر لأنه حينها سيكون هو أعلى راتب في العمود كله.
ملاحظة: في هذا المثال بالتحديد كان بإمكان استخدام دالة إسمها MAX() للحصول على أعلى قيمة و لكن لا تشغل بالك بها لأنها ستمر معك لاحقاً في الدورة.
الإستعلام
في حال أردت وضع رقمين بعد الكلمة LIMIT يمكنك تعديل الإستعلام كالتالي و الحصول على نفس النتيجة.
سنحصل على النتيجة التالية عند تنفيذ الإستعلام.
Highest Salary |
---|
1000.00 |
المثال الرابع
الإستعلام التالي يحضر أدنى راتب يتم إعطاؤه للموظف في الشركة.
الحيلة التي سنفعلها هنا للحصول على أدنى راتب هي ترتيب أسطر الجدول بشكل تصاعدي ( أي من الأصغر إلى الأكبر ) على أساس الراتب و من ثم نعرض الراتب الموضوع في أول سطر لأنه حينها سيكون هو أدنى راتب في العمود كله.
ملاحظة: في هذا المثال بالتحديد كان بإمكان استخدام دالة إسمها MIN() للحصول على أدنى قيمة و لكن لا تشغل بالك بها لأنها ستمر معك لاحقاً في الدورة.
الإستعلام
في حال أردت وضع رقمين بعد الكلمة LIMIT يمكنك تعديل الإستعلام كالتالي و الحصول على نفس النتيجة.
سنحصل على النتيجة التالية عند تنفيذ الإستعلام.
Lowest Salary |
---|
700.00 |
المثال الخامس
الإستعلام التالي يحضر ثاني أعلى راتب يتم إعطاؤه للموظف في الشركة.
الحيلة التي سنفعلها هنا للحصول على ثاني أعلى راتب هي ترتيب أسطر الجدول بشكل تنازلي ( أي من الأكبر إلى الأصغر ) على أساس الراتب مع التأكد من أنه لا يوجد أي قيم مكررة في النتيجة و من ثم نعرض الراتب الموضوع في ثاني سطر لأنه حينها سيكون هو ثاني أعلى راتب في العمود كله.
الإستعلام
سنحصل على النتيجة التالية عند تنفيذ الإستعلام.
Second Highest Salary |
---|
920.00 |
المثال السادس
في حال أردت عرض أول أعلى ثلاث رواتب يمكنك وضع الإستعلامات التي كتبتها في الأمثلة السابقة نفسها بشكل متداخل و من ثم تجميعها بداخل أمر SELECT و هذا الأسلوب يسمى Sub Queries.
ملاحظة: لا تشغل بالك إطلاقاً بطريقة كتابة هذا الإستعلام لأنك ستتعلمه لاحقاً في الدورة و لكننا نريك المزيد من الإستخدامات للكلمة LIMIT ليس إلا.
الإستعلام
سنحصل على النتيجة التالية عند تنفيذ الإستعلام.
First Highest Salary | Second Highest Salary | Third Highest Salary |
---|---|---|
1000.00 | 920.00 | 900.00 |