SQLالتعامل مع الحقول الفارغة
- مفهوم الحقول الفارغة
- طريقة إنشاء حقول لا يمكن أن تكون فارغة
- تجهيز قاعدة البيانات التي سنطبق عليها
- طريقة معرفة الحقول الفارغة
- وضع قيم إفتراضية مكان الحقول الفارغة التي يتم جلبها
مفهوم الحقول الفارغة
في البداية, المقصود بالحقول الفارغة ( Null Values ) هو أي حقل قيمته غير محددة بعد في الجدول كما سبق و رأينا.
في هذا الدرس سنتعلم كيف نشيك على قيم الحقول لمعرفة ما إن كانت فارغة أم لا.
بالإضافة إلى ذلك سنتعلم كيف نقوم تبديلها وقت العرض بقيم تكون مفهومة و أوضح بالنسبة للمستخدم العادي.
طريقة إنشاء حقول لا يمكن أن تكون فارغة
في البداية سبق و تعاملنا مع هذا الأمر في قواعد البيانات التي كنا نجهزها في الدروس السابقة حيث كنا نضع في الجدول عمود إسمه id
و من خصائصه أنه لا يمكن أن يكون فارغاً لدى أي سطر موضوع تحته و أنه يتم إعطاؤه ترقيم تلقائي.
الآن في حال أردت جعل العمود لا يسمح بأن يكون فيه أي حقول فارغة, يمكنك إضافة الكلمة NOT NULL عند تعريف العمود لحظة إنشاء الجدول.
عندها, حين تقوم بإدخال أي سطر في الجدول سيكون عليك إدخل قيمة لكل حقل لا يقبل أن يكون فارغاً و إلا فلن يسمح لك بإدخال السطر الذي كنت تريد إضافته.
تجهيز قاعدة البيانات التي سنطبق عليها
قم بتنفيذ الإستعلام التالي حتى تنشئ قاعدة بيانات جديدة إسمها harmash
و تنشئ فيها جدول إسمه users
يحتوي على بيانات 10 مستخدمين.
الجدول users
يتألف من الحقول التالية:
id
عبارة عن رقم يتم إعطاؤه بشكل تلقائي لكل سطر جديد يتم إضافته.username
يمثل إسم المستخدم و الذي يجب تحديده عند إضافة سطر جديد.country
يمثل بلد المستخدم, و الذي يمكن تحديده عند إضافة مستخدم جديد و يمكن تركه فارغاً.
الإستعلام
بعد تنفيذ الإستعلام السابق في 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
.
الإستعلام
سنحصل على النتيجة التالية عند تنفيذ الإستعلام.
نلاحظ أنه يوجد 5 مستخدمين معروفين من أي بلد, أي الحقل country
عندهم ليس فارغاً.
id | user | country |
---|---|---|
3 | hanan | KSA |
4 | saly | Lebanon |
6 | hamad | Syria |
8 | rashed | Oman |
9 | majed | Yaman |
المثال الثاني
الإستعلام التالي يقوم بعرض كل أسطر الجدول التي لا تملك قيمة في الحقل 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'
.
الإستعلام
سنحصل على النتيجة التالية عند تنفيذ الإستعلام.
نلاحظ أنه يوجد 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
كقيمة إفتراضية.