Programming Basics SQL HTML CSS JavaScript React Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Linux Learn Typing

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);
-- سيتم حذفها 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 أي سطر سيتم عرضه يجب أن لا يكون الحقل
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 أي سطر سيتم عرضه يجب أن يكون الحقل
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;
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 كقيمة إفتراضية.