القائمة الرئيسية

الصفحات

الدرس 11 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

مفهوم الحقول الفارغة

في البداية, المقصود بالحقول الفارغة ( Null Values ) هو أي حقل قيمته غير محددة بعد في الجدول كما سبق و رأينا.

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

طريقة إنشاء حقول لا يمكن أن تكون فارغة

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

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

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

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

الجدول users يتألف من الحقول التالية:

  • id عبارة عن رقم يتم إعطاؤه بشكل تلقائي لكل سطر جديد يتم إضافته.

  • username يمثل إسم المستخدم و الذي يجب تحديده عند إضافة سطر جديد.

  • country يمثل بلد المستخدم, و الذي يمكن تحديده عند إضافة مستخدم جديد و يمكن تركه فارغاً.

الإستعلام

      -- سيتم حذفها harmash في حال كان يوجد بالأساس قاعدة بيانات إسمها
      DROP DATABASE IF EXISTS harmash;

      -- harmash هنا قمنا بإنشاء قاعدة بيانات جديدة إسمها
      CREATE DATABASE harmash;

      -- harmash هنا قمنا بتحديد أن أي إستعلام جديد سيتم تنفيذه على قاعدة البيانات
      USE harmash;

      -- يتألف من 3 أعمدة users هنا قمنا بإنشاء جدول جديد إسمه
      -- لأننا قمنا بتحديدها قبل إستدعاء هذا الأمر harmash سيتم إنشاء هذا الجدول بداخل قاعدة البيانات
      CREATE TABLE users (
      id       INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
      username VARCHAR(50) NOT NULL,
      country  VARCHAR(50)
      );

      -- هنا قمنا بإضافة 10 أسطر في الجدول, أي أضفنا معلومات 10 مستخدمين
      -- لاحظ أننا لم نحدد أسماء الأعمدة التي سنضع فيها البيانات لأننا قمنا بملئ جميع المعلومات
      -- مكان كل حقل لن نقوم بوضع قيمة فيه null بما أننا لم نحدد أسماء الأعمدة التي سنملأها لاحظ أننا مجبورين على وضع كلمة
      -- الموضوعة في بداية كل أمر سيتم إستبدالها بترقيم تلقائي من قبل قاعدة البيانات null و لا تنسى أن الكلمة
      INSERT INTO users VALUES (null, "rami", null);
      INSERT INTO users VALUES (null, "ahmad", null);
      INSERT INTO users VALUES (null, "hanan", "KSA");
      INSERT INTO users VALUES (null, "saly", "Lebanon");
      INSERT INTO users VALUES (null, "samir", null);
      INSERT INTO users VALUES (null, "hamad", "Syria");
      INSERT INTO users VALUES (null, "abdullah", null);
      INSERT INTO users VALUES (null, "rashed", "Oman");
      INSERT INTO users VALUES (null, "majed", "Yaman");
      INSERT INTO users VALUES (null, "rayan", null);
    

بعد تنفيذ الإستعلام السابق في phpMyAdmin سيتم إنشاء قاعدة البيانات harmash و إنشاء الجدول users بداخلها.
قم بالنقر على إسم قاعدة البيانات harmash من القائمة اليسرى حتى تبدأ بالتعامل معها و تطبيق ما ستتعلمه في هذا الدرس.


البيانات التي قمنا بإضافتها بشكل إفتراضي في الجدول users.

id user country
1 rami NULL
2 ahmad NULL
3 hanan KSA
4 saly Lebanon
5 samir NULL
6 hamad Syria
7 abdullah NULL
8 rashed Oman
9 majed Yaman
10 rayan NULL

طريقة معرفة الحقول الفارغة

للتأكد ما إن كان الحقل يحتوي على قيمة أم أنه فارغ يجب استخدام العامل IS NULL أو العامل IS NOT NULL عند التشييك على قيمة الحقل.
لا تستخدم الرموز = و != و <> لمعرفة ما إن كان الحقل فارغاً لأنها تستخدم لهذا الغرض بل تستخدم لمقارنة القيم النصية و الرقمية و التواريخ فقط كما أشرنا سابقاً.


المثال الأول

الإستعلام التالي يقوم بعرض كل أسطر الجدول ما عدا الأسطر التي لا تملك قيمة في الحقل country.

الإستعلام

      SELECT * FROM users           -- users هنا قمنا بعرض جميع البيانات الموجودة في الجدول
      WHERE country IS NOT NULL;    -- فيه فارغاً country أي سطر سيتم عرضه يجب أن لا يكون الحقل
    

سنحصل على النتيجة التالية عند تنفيذ الإستعلام.
نلاحظ أنه يوجد 5 مستخدمين معروفين من أي بلد, أي الحقل country عندهم ليس فارغاً.

id user country
3 hanan KSA
4 saly Lebanon
6 hamad Syria
8 rashed Oman
9 majed Yaman


المثال الثاني

الإستعلام التالي يقوم بعرض كل أسطر الجدول التي لا تملك قيمة في الحقل country.

الإستعلام

      SELECT * FROM users       -- users هنا قمنا بعرض جميع البيانات الموجودة في الجدول
      WHERE country IS NULL;    -- فيه فارغ country أي سطر سيتم عرضه يجب أن يكون الحقل
    

سنحصل على النتيجة التالية عند تنفيذ الإستعلام.
نلاحظ أنه يوجد 5 مستخدمين غير معروفين من أي بلد, أي الحقل country عندهم فارغ.

id user country
1 rami NULL
2 ahmad NULL
5 samir NULL
7 abdullah NULL
10 rayan NULL

وضع قيم إفتراضية مكان الحقول الفارغة التي يتم جلبها

في حال كانت نتيجة الإستعلام تضمن حقول فارغة, يمكنك عرض كلمة يفهمها المستخدم بشكل أسهل مثل Not Specified أو Unknown أو غير محدد أو أي كلمة أخرى لها ذات المعنى.


الآن, لتبديل الحقول الفارغة التي قيمتها NULL عليك استخدام الدالة المخصصة في قاعدة البيانات لأجل هذا الغرض.

  • في قواعد بيانات MySQL نستخدم الدالة IFNULL() من أجل تبديل قيم الحقول الفارغة.

  • في قواعد بيانات SQL Server نستخدم الدالة ISNULL() من أجل تبديل قيم الحقول الفارغة.

  • في قواعد بيانات ORACLE نستخدم الدالة NVL() من أجل تبديل قيم الحقول الفارغة.

ملاحظة: في الأمثلة التالية إستخدمنا الدالة IFNULL() لأننا نطبق التمارين في قواعد بيانات MySQL.


مثال

الإستعلام التالي يقوم بعرض كل أسطر الجدول و يبدل أي قيمة فارغة في الحقل country بالكلمة 'unknown'.

الإستعلام

      SELECT
      id, username, IFNULL(country, 'Unknown') AS 'country'
      FROM
      users;
    

سنحصل على النتيجة التالية عند تنفيذ الإستعلام.
نلاحظ أنه يوجد 5 مستخدمين تم وضع القيمة 'Unknown' لهم في الحقل country لأنه كان فارغاً عندهم.

id user country
1 rami Unknown
2 ahmad Unknown
3 hanan KSA
4 saly Lebanon
5 samir Unknown
6 hamad Syria
7 abdullah Unknown
8 rashed Oman
9 majed Yaman
10 rayan Unknown


ملاحظة

في المثال السابق قمنا بوضع الكلمة 'Unknown' كقيمة إفتراضية لأن الحقل يجب أن يحتوي على قيمة نصية في الأساس فكان وضع هذه القيمة مناسباً.
بينما لو كان الحقل في الأساس مخصص لقيم رقمية لكان الأفضل أن نضع 0 كقيمة إفتراضية.