SQLالتعامل مع الحقول الفارغة
- مفهوم القيمة
NULL
- طريقة إنشاء حقول لا يمكن أن تكون فارغة
- تجهيز قاعدة البيانات التي سنطبق عليها
- طريقة معرفة الحقول الفارغة
- وضع قيمة إفتراضية مكان الحقول الفارغة التي يتم جلبها
مفهوم القيمة NULL
الحقل الذي تكون قيمته NULL
هو فعلياً حقل لا يملك قيمة بعد.
الحقل الإختياري في الجدول هو الحقل الذي يمكن إبقاؤه بلا قيمة. عند إضافة سطر جديد في الجدول أو تحديث سطر موجود فيه، إذا لم يتم وضع قيمة في الحقول الإختيارية فإن قيمتهم ستكون NULL
.
في حال وضع صفر أو نص فارغ في الحقل فإنها فعلياً تعتبر قيم عادية في حين أن NULL
تعني عدم وجود قيمة على الإطلاق.
طريقة إنشاء حقول لا يمكن أن تكون فارغة
إفتراضياً، الحقول العادية في الجدول يمكن إبقاءها بلا قيمة.
في حال أردت جعل العمود لا يسمح بأن يكون فيه أي حقول فارغة يجب أن تضيف الخاصية NOT NULL
أثناء إنشاء الجدول و تعريف العمود. عندها، حين يتم إدخال أي سطر في الجدول يجب إدخل قيمة لكل حقل لا يقبل أن يكون فارغاً و إلا فإنه لن يتم الموافقة على إضافة السطر.
عند تعريف حقل في الجدول كمفتاح أساسي PRIMARY KEY
فإنه بشكل تلقائي يتم إعتباره NOT NULL
لهذا لا يمكن تركه فارغاً.
في حال لم يتم تحديد أن العمود نوعه 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
.
- العامل
IS NULL
يستخدم لمعرفة ما إن كان الحقل فارغاً. - العامل
IS NOT NULL
يستخدم لمعرفة ما إن كان الحقل غير فارغ.
لا يمكنك اسخدام الرموز =
و !=
و <>
لمعرفة ما إن كان الحقل فارغاً أم لا لأنها لا تُستخدم لهذا الغرض بل تستخدم لمقارنة القيم النصية و الرقمية و التواريخ فقط.
الإستعلام التالي يقوم بعرض كل أسطر الجدول ما عدا الأسطر التي لا تملك قيمة في الحقل country
.
المثال الأول
SELECT * FROM users -- users هنا قمنا بعرض جميع البيانات الموجودة في الجدول WHERE country IS NOT NULL; -- فيه فارغاً country أي سطر سيتم عرضه يجب أن لا يكون الحقل
النتيجة
id | user | country |
---|---|---|
3 | hanan | KSA |
4 | saly | Lebanon |
6 | hamad | Syria |
8 | rashed | Oman |
9 | majed | Yaman |
نلاحظ أنه يوجد 5 مستخدمين معروفين من أي بلد، أي الحقل country
عندهم ليس فارغاً.
الإستعلام التالي يقوم بعرض كل أسطر الجدول التي لا تملك قيمة في الحقل country
.
المثال الثاني
SELECT * FROM users -- users هنا قمنا بعرض جميع البيانات الموجودة في الجدول WHERE country IS NULL; -- فيه فارغ country أي سطر سيتم عرضه يجب أن يكون الحقل
النتيجة
id | user | country |
---|---|---|
1 | rami | NULL |
2 | ahmad | NULL |
5 | samir | NULL |
7 | abdullah | NULL |
10 | rayan | NULL |
نلاحظ أنه يوجد 5 مستخدمين غير معروفين من أي بلد، أي الحقل country
عندهم فارغ.
وضع قيمة إفتراضية مكان الحقول الفارغة التي يتم جلبها
في حال كانت نتيجة الإستعلام تضمن حقول فارغة، يمكنك عرض كلمة مفهومة للمستخدم بدلاً منها مثل Not Specified أو Unknown أو غير محدد أو أي كلمة أخرى لها ذات المعنى.
طريقة تبديل الحقول الفارغة التي قيمتها NULL
تختلف من قاعدة بيانات لأخرى على النحو التالي:
- في قواعد بيانات MySQL و قواعد بيانات SQLite نستخدم الدالة
IFNULL()
. - في قواعد بيانات SQL Server و قواعد بيانات Access نستخدم الدالة
ISNULL()
. - في قواعد بيانات ORACLE نستخدم الدالة
NVL()
.
في هذه الدورة سنستخدم الدالة IFNULL()
لأننا نستخدم قواعد بيانات MySQL.
الإستعلام التالي يقوم بعرض كل أسطر الجدول و يبدل أي قيمة فارغة في الحقل country
بالكلمة 'unknown'
.
مثال
SELECT id, username, IFNULL(country, 'Unknown') AS 'country' FROM users;
النتيجة
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 |
نلاحظ أنه يوجد 5 مستخدمين تم وضع القيمة 'Unknown'
لهم في الحقل country
لأنه كان فارغاً عندهم.
في المثال السابق قمنا بوضع الكلمة 'Unknown'
كقيمة إفتراضية لأن الحقل يجب أن يحتوي على قيمة نصية في الأساس فكان وضع هذه القيمة مناسباً. بينما لو كان الحقل في الأساس مخصص لقيم رقمية لكان الأفضل أن نضع 0
كقيمة إفتراضية.