إعلان
دورة تطوير التطبيقات باستخدام لغة JavaScript في هذه الدورة ستتعلم لغة جافا سكريبت, استخدام مكتبة React.js, بناء API الموقع بواسطة Node.js, تطوير تطبيق جوال باستخدام React Native, و في نهاية الدورة ستتعلم تطوير تطبيق محادثة شبيه بتطبيق WhatsApp. تعلم الآن
دورة تطوير واجهات المستخدم في هذه الدورة ستتعلم لغة HTML و لغة CSS و لغة JavaScript. من ناحية التطبيق العملي ستتعلم طريقة بناء واجهة متجر إلكتروني مكون من ست صفحات, تحويل خمسة تصاميم PSD إلى صفحات ويب, بناء واجهة مستخدم تشبه موقع يوتيوب, بناء لوحة تحكم إحترافية. تعلم الآن
تطوير تطبيقات باستخدام لغة بايثون في هذه الدورة ستتعلم أساسيات البرمجة بلغة بايثون وصولاً إلى التعامل مع أشهر أطر العمل (Flask و Django) و ستتعلم كيف تبني متجر إلكتروني يمكن للمستخدمين البيع و الشراء من خلاله. تعلم الآن
دورة تطوير تطبيقات الويب باستخدام لغة PHP في هذه الدورة ستتعلم لغة PHP من الصفر, استخدام إطار العمل Laravel بشرح مفصّل و عملي, كيفية تطوير شبكة اجتماعية تشبه Instagram, بناء API لتطبيق جوال وفق أسلوب RESTful, تطوير موقع إعلانات مبوبة, تطوير نظام إدارة محتوى CMS كامل. تعلم الآن
دورة تطوير تطبيقات الويب باستخدام لغة Ruby في هذه الدورة ستتعلم البرمجة بلغة Ruby إنطلاقاً من أبسط المفاهيم وحتى بناء تطبيق حقيقي, إستخدام إطار العمل Ruby on Rails بشرح مفصّل و عملي, بناء تطبيق حقيقي عبارة عن شبكة اجتماعية تشبه تويتر, تطوير مجتمع الكتروني يشبه حسوب I/O. تعلم الآن
دورة علوم الحاسوب هذه الدورة معدة لتكون مدخل لعلوم الحاسوب و لغات البرمجة حيث ستتعرف فيها على أنظمة التشغيل و ستتعمق في نظام لينكس و في كيفية التعامل معه من خلال موجه الأوامر, بالإضافة إلى قواعد البيانات و أساسيات الشبكات و الخوادم و مبادئ الحماية والأمان في الويب. تعلم الآن

    SQL تحديد عدد الأسطر الأقصى التي يمكن أن يتم جلبها

    مفهوم تحديد عدد الأسطر التي سيتم إرجاعها

    عند جلب بيانات سواء ضمن شروط أو بدون أي شروط فإن النتيجة التي ستحصل عليها قد تكون كبيرة جداً بمعنى أنها قد تحتوي على عدد كبير من الأسطر و التي قد لا تحتاجها أصلاً لأنه يكفيك أن تحصل على جزء منها.

    في هذا الدرس ستتعلم كيف تحدد عدد الأسطر الأقصى التي قد يرجعها الإستعلام و ستعرف كيف يمكن الإستفادة من هذا الأمر خاصةً مع البيانات الرقمية.

    الآن و قبل أن نبدأ, إليك بعض النماذج لأهمية تحديد عدد الأسطر في المشاريع.


    السيناريو الأول

    في حال أردت جلب بيانات المستخدمين المخزنة في موقع فيسبوك فأنت بذلك ستجلب أكثر من مليار سطر في إستعلام واحد.

    جلب هذا العدد من البيانات في وقت واحد أمر مستحيل لأنه يتطلب وقت كبير جداً و مساحة كبيرة لإستيعابه و لهذا يتم تجزئته و إرساله على دفعات. فمثلاً بدلاً من أن تطلب معلومات المليار شخص دفعة واحدة, تجدهم يسمحوا لك بالحصول على معلومات 20 مستخدم على سبيل المثال كلما حاولت عرض المزيد من النتائج.

    هذا الأمر يتم تطبيقه في كل المشاريع الأخرى و في أماكن عديدة في المشروع الواحد, فمثلاً موقع يوتيوب تجده يعرض لك أيضاً كمية محددة من الفيديوهات في كل صفحة, و تجده يعرض لك كيمة محددة من التعيلقات تحت كل فيديو مع إمكانية عرض المزيد من التعليقات كلما أردت ذلك.
    لا تظن أن هذا الأمر مقتصر فقط على مواقع التواصل الإجتماعي بل حتى في المواقع العادية فمثلاً في قسم مقالات هرمش أيضاً نعرض كمية محددة من المقالات و كمية محددة من التعليقات و ليس كل المقالات أو التعليقات الموضوعة تحت أي مقال دفعة واحدة.


    السيناريو الثاني

    في حال أراد مدير شركة إرسال 5 موظفين في شركته إلى مهمة تطلب منهم السفر خارج البلاد لعدة أيام أو أشهر.
    هنا قد تجد أن المدير سيقرر من يختار من موظفينه لعدة عوامل مثل عمر الموظف المناسب للمهمة, هل يجب أن يكون إمرأة أو رجل أو لا يهم, هل هذا الشخص متزوج أم لا, منصب الشخص في الشركة, شهادة الموظف العلمية, سنوات الخبرة التي يملكها الموظف إلخ..
    بعد أن قام المدير بوضع معاير التي يجب أن تتوفر في الموظفين قد يجد 40 شخص تتوفر فيهم هذه المواصفات.
    بما أن المدير يحتاج 5 موظفين فقط لهذه المهمة فإنه يحتاج معرفة أول 5 موظفين تتوفر فيهم هذه المعايير حتى يتواصل معهم و يعينهم للمهمة.


    معلومة تقنية

    عملية إرجاع كمية محددة من الأسطر الموجودة في الجدول تسمى Pagination أو Paging.
    إذاً أي موقع تجده على سبيل المثال يعرض لك 10 مقالات مختلفة في كل صفحة, أو معلومات 20 مستخدم مختلف في كل صفحة إلخ.. يطبق ما يسمى Pagination.


    تحديد عدد الأسطر الأقصى التي يمكن أن ترجع

    لتحديد عدد الأسطر الأقصى التي يمكن أن يرجعها الإستعلام في قواعد بيانات MySQL و SQLite نستخدم الكلمة LIMIT كالتالي.

    SELECT column_name(s)
    FROM table_name
    WHERE condition
    LIMIT [offset,] row_count;
    	

    • بعد الكلمة 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 كالتالي.

    SELECT TOP row_count column_name(s)
    FROM table_name
    WHERE condition;
    	

    في قواعد بيانات ORACLE نستخدم الكلمة ROWNUM كالتالي.

    SELECT column_name(s)
    FROM table_name
    WHERE ROWNUM <= row_count; 
    	

    في النهاية, مهما كان نوع قاعدة البيانات التي ستتعامل معها, فكرة تحديد عدد الأسطر التي سيرجعها الإستعلام هي نفسها تماماً.

    تجهيز قاعدة البيانات التي سنطبق عليها

    قم بتنفيذ الإستعلام التالي حتى تنشئ قاعدة بيانات جديدة إسمها harmash و تنشئ فيها جدول إسمه employees يحتوي على بيانات 10 موظفين.

    الإستعلام

    -- سيتم حذفها harmash في حال كان يوجد بالأساس قاعدة بيانات إسمها
    DROP DATABASE IF EXISTS harmash;
    
    -- harmash هنا قمنا بإنشاء قاعدة بيانات جديدة إسمها
    CREATE DATABASE harmash;
    
    -- harmash هنا قمنا بتحديد أن أي إستعلام جديد سيتم تنفيذه على قاعدة البيانات
    USE harmash;
    
    -- يتألف من 6 أعمدة 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 أحضر جميع المعلومات المتوفرة في الجدول
    LIMIT 3;                  -- أحضر أول ثلاث أسطر تم إيجادها في الجدول
    		

    في حال أردت وضع رقمين بعد الكلمة LIMIT يمكنك تعديل الإستعلام كالتالي و الحصول على نفس النتيجة.

    SELECT * FROM employees   -- employees أحضر جميع المعلومات المتوفرة في الجدول
    LIMIT 0,3;                -- إبتداءاً من السطر رقم 0 و الذي هو نفسه السطر الأول أحضر أول 3 أسطر تم إيجادها في الجدول
    		

    سنحصل على النتيجة التالية عند تنفيذ الإستعلام.

    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 أو بعده.

    الإستعلام

    SELECT * FROM employees          -- employees أحضر جميع المعلومات المتوفرة في الجدول
    WHERE birthday >= '1990-01-01'   -- '1990-01-01' في السطر يملك تاريخ أكبر أو يساوي birthday بشرط أن يكون الحقل
    LIMIT 3;                         -- أحضر أول ثلاث أسطر تم إيجادها في الجدول
    		

    في حال أردت وضع رقمين بعد الكلمة LIMIT يمكنك تعديل الإستعلام كالتالي و الحصول على نفس النتيجة.

    SELECT * FROM employees          -- employees أحضر جميع المعلومات المتوفرة في الجدول
    WHERE birthday >= '1990-01-01'   -- '1990-01-01' في السطر يملك تاريخ أكبر أو يساوي birthday بشرط أن يكون الحقل
    LIMIT 0,3;                       -- إبتداءاً من السطر رقم 0 و الذي هو نفسه السطر الأول أحضر أول 3 أسطر تم إيجادها في الجدول
    		

    سنحصل على النتيجة التالية عند تنفيذ الإستعلام.

    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() للحصول على أعلى قيمة و لكن لا تشغل بالك بها لأنها ستمر معك لاحقاً في الدورة.

    الإستعلام

    SELECT salary AS 'Highest Salary' -- و قمنا بإعطاء إسم للعمود salary هنا قمنا بتحديد أننا نريد قيم العامود
    FROM employees                    -- employees هنا قمنا بتحديد أن نريد إحضار القيم من الجدول
    ORDER BY salary DESC              -- فقط من الأكبر إلى الأصغر salary هنا قمنا بترتيب قيم الجدول الذي سيرجع و الذي يتألف من العامود
    LIMIT 1;                          -- هنا قمنا بتحديد أننا نريد السطر الأول فقط الذي يرجعه هذا الإستعلام, أي القيمة الأولى التي سيتم إرجاعها
    		

    في حال أردت وضع رقمين بعد الكلمة LIMIT يمكنك تعديل الإستعلام كالتالي و الحصول على نفس النتيجة.

    SELECT salary AS 'Highest Salary' -- و قمنا بإعطاء إسم للعمود salary هنا قمنا بتحديد أننا نريد قيم العامود
    FROM employees                    -- employees هنا قمنا بتحديد أن نريد إحضار القيم من الجدول
    ORDER BY salary DESC              -- فقط من الأكبر إلى الأصغر salary هنا قمنا بترتيب قيم الجدول الذي سيرجع و الذي يتألف من العامود
    LIMIT 0,1;                        -- هنا قمنا بتحديد أننا نريد السطر الأول فقط الذي يرجعه هذا الإستعلام, أي القيمة الأولى التي سيتم إرجاعها
    		

    سنحصل على النتيجة التالية عند تنفيذ الإستعلام.

    Highest Salary
    1000.00


    المثال الرابع

    الإستعلام التالي يحضر أدنى راتب يتم إعطاؤه للموظف في الشركة.
    الحيلة التي سنفعلها هنا للحصول على أدنى راتب هي ترتيب أسطر الجدول بشكل تصاعدي ( أي من الأصغر إلى الأكبر ) على أساس الراتب و من ثم نعرض الراتب الموضوع في أول سطر لأنه حينها سيكون هو أدنى راتب في العمود كله.
    ملاحظة: في هذا المثال بالتحديد كان بإمكان استخدام دالة إسمها MIN() للحصول على أدنى قيمة و لكن لا تشغل بالك بها لأنها ستمر معك لاحقاً في الدورة.

    الإستعلام

    SELECT salary AS 'Lowest Salary'  -- و قمنا بإعطاء إسم للعمود salary هنا قمنا بتحديد أننا نريد قيم العامود
    FROM employees                    -- employees هنا قمنا بتحديد أن نريد إحضار القيم من الجدول
    ORDER BY salary                   -- فقط من الأصغر إلى الأكبر salary هنا قمنا بترتيب قيم الجدول الذي سيرجع و الذي يتألف من العامود
    LIMIT 1;                          -- هنا قمنا بتحديد أننا نريد السطر الأول فقط الذي يرجعه هذا الإستعلام, أي القيمة الأولى التي سيتم إرجاعها
    		

    في حال أردت وضع رقمين بعد الكلمة LIMIT يمكنك تعديل الإستعلام كالتالي و الحصول على نفس النتيجة.

    SELECT salary AS 'Lowest Salary'  -- و قمنا بإعطاء إسم للعمود salary هنا قمنا بتحديد أننا نريد قيم العامود
    FROM employees                    -- employees هنا قمنا بتحديد أن نريد إحضار القيم من الجدول
    ORDER BY salary                   -- فقط من الأصغر إلى الأكبر salary هنا قمنا بترتيب قيم الجدول الذي سيرجع و الذي يتألف من العامود
    LIMIT 0,1;                        -- هنا قمنا بتحديد أننا نريد السطر الأول فقط الذي يرجعه هذا الإستعلام, أي القيمة الأولى التي سيتم إرجاعها
    		

    سنحصل على النتيجة التالية عند تنفيذ الإستعلام.

    Lowest Salary
    700.00


    المثال الخامس

    الإستعلام التالي يحضر ثاني أعلى راتب يتم إعطاؤه للموظف في الشركة.
    الحيلة التي سنفعلها هنا للحصول على ثاني أعلى راتب هي ترتيب أسطر الجدول بشكل تنازلي ( أي من الأكبر إلى الأصغر ) على أساس الراتب مع التأكد من أنه لا يوجد أي قيم مكررة في النتيجة و من ثم نعرض الراتب الموضوع في ثاني سطر لأنه حينها سيكون هو ثاني أعلى راتب في العمود كله.

    الإستعلام

    SELECT DISTINCT salary AS 'Second Highest Salary' -- بدون وجود أي قيم مكررة و قمنا بإعطاء إسم للعمود salary هنا قمنا بتحديد أننا نريد قيم العامود
    FROM employees                                    -- employees هنا قمنا بتحديد أن نريد إحضار القيم من الجدول
    ORDER BY salary DESC                              -- فقط من الأكبر إلى الأصغر salary هنا قمنا بترتيب قيم الجدول الذي سيرجع و الذي يتألف من العامود
    LIMIT 1,1;                                        -- إبتداءاً من السطر رقم 0 و الذي هو نفسه السطر الأول أحضر أول سطر تم إيجاده في الجدول
    		

    سنحصل على النتيجة التالية عند تنفيذ الإستعلام.

    Second Highest Salary
    920.00


    المثال السادس

    في حال أردت عرض أول أعلى ثلاث رواتب يمكنك وضع الإستعلامات التي كتبتها في الأمثلة السابقة نفسها بشكل متداخل و من ثم تجميعها بداخل أمر SELECT و هذا الأسلوب يسمى Sub Queries.

    ملاحظة: لا تشغل بالك إطلاقاً بطريقة كتابة هذا الإستعلام لأنك ستتعلمه لاحقاً في الدورة و لكننا نريك المزيد من الإستخدامات للكلمة LIMIT ليس إلا.

    الإستعلام

    -- الخارجي سيجلب كل الإستعلامات التي وضعناها بداخله و كل جدول يرجعوه سيتم وضعه كعمود فيه SELECT الأمر
    SELECT
    	-- الإستعلام التالي يمثل أول عمود و القيمة التي ستوضع فيه
    	(SELECT salary FROM employees ORDER BY salary DESC LIMIT 0,1) AS 'First Highest Salary',
    	-- الإستعلام التالي يمثل ثاني عمود و القيمة التي ستوضع فيه
    	(SELECT DISTINCT salary FROM employees ORDER BY salary DESC LIMIT 1,1) AS 'Second Highest Salary',
    	-- الإستعلام التالي يمثل ثالث عمود و القيمة التي ستوضع فيه
    	(SELECT DISTINCT salary FROM employees ORDER BY salary DESC LIMIT 2,1) AS 'Third Highest Salary';
    		

    سنحصل على النتيجة التالية عند تنفيذ الإستعلام.

    First Highest Salary Second Highest Salary Third Highest Salary
    1000.00 920.00 900.00
    إعلان

    Eqla3Tech.com

    شروحات مكتوبة حول لغات البرمجة و تقنية المعلومات باللغة العربية مقدمة من إقلاع تك.

    لغة جافا لغة ++C قواعد البيانات نظام ويندوز نظام لينكس الشبكات تقنية المعلومات الأمن السيبراني

    الدورات

    أدوات مساعدة

    الأقسام

    دورات
    مقالات أسئلة مشاريع كتب