الجمعة، 30 نوفمبر 2018

الدرس الثاني والعشرون WHERE IS NULL

في الدرس السابق ناقشنا استخدام عبارة WHERE والغرض العام منها. في هذا الدرس سوف نتطرق إلى استخدام عبارة WHERE مع معامل مهم وهو (IS NULL) . في الدروس السابقة تطرقنا إلى مفهوم القيمة الخالية او NULL وهي تختلف كليا عن قيمة الصفر او قيمة العبارة الخالية ('') . مثلا اذا كان لدينا جدول يمتلك حقل من نوع INT فإن هذا الحقل يخزن الاعداد الصحيحة وبضمنها الصفر وكذلك يمكن أن يخزن القيمة الخالية NULL اذا تم إعداد هذا الحقل لخزن القيمة الخالية. ان نظام إدارة قواعد البيانات سوف يعامل قيمة الصفر بشكل مختلف عن قيمة NULL.  مثلا اذا اردنا استعادة كل الأسطر التي تمتلك قيمة صفر في هذا الحقل يمكن كتابة الاستعلام التالي
SELECT * FROM TABLE1 WHERE COL1=0

هذا الاستعلام سوف يعيد كل الأسطر التي تمتلك قيمة صفر في العمود COL1 . ولكن لن يعيد الأسطر التي تمتلك قيمة NULL  في الحقل COL1.

لاستعادة الأسطر التي تمتلك قيمة NULL في الحقل COL1 نستخدم معامل IS NULL (يجب ترك مسافة بين كلمة IS وكلمة NULL )

SELECT * FROM TABLE1 WHERE COL1 IS NULL

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

الان لو أردنا أن نعيد كل الأسطر التي تمتلك قيمة صفر والتي تمتلك قيمة خالية ؟
يمكن القيام بذلك بعدة طرق وكما يلي
اولا : نستخدم شرطين و يتم تحقيقها باستخدام المعامل المنطقي OR
SELECT * FROM TABLE1 WHERE (COL1 IS NULL ) OR (COL1 =0)
في الاستعلام السابق سوف يعيد كل الأسطر التي تمتلك قيمة صفر في هذا الحقل او التي تمتلك قيمة خالية.

ثانيا: يمكن استخدام تحويل البيانات data transformation هناك دالة في SQL Server  اسمها ISNULL (ملاحظة هنا تكتب كلمة IS ملاصقة لكلمة NULL وبدون مسافة فاصلة) هذه الدالة تعطينا الخيار باستبدال او تحويل قيمة NULL  إلى قيمة أخرى مثل صفر في الحقول العددية او عبارة خالية في الحقول النصية او تاريخ محدد في حقول التواريخ وهكذا والصيغة العامة لهذه الدالة كما يلي
ISNULL(COLUMN NAME, NEW VALUE)

اي نفتح قوس ثم اسم حقل البيانات ثم فاصلة ثم القيمة الجديدة وكما يلي
ISNULL (COL1, 0)

هنا سوف يقوم نظام إدارة قواعد البيانات بفحص قيم الحقل COL1 فأذا كانت القيمة NULL سوف يستبدلها بصفر واذا كانت اي قيمة أخرى غير NULL سوف يبقيها كما هي لذلك عند استخدام هذه الدالة مع عبارة WHERE سوف تعيد كل الأسطر التي تمتلك قيمة صفر وبضمنها الأسطر التي تمتلك قيمة خالية لأننا حولنا القيمة  الخالية إلى قيمة صفر .
SELECT * FROM TABLE1 WHERE ISNULL(COL1,0)=0

يمكن أن نستخدم الدالة  ISNULL ضمن عبارة SELECT وهي سوف تعمل بشكل مشابه حيث تقوم بفحص قيم الحقل COL1 فأذا كانت القيمة NULL سوف يستبدلها بصفر واذا كانت اي قيمة أخرى غير NULL سوف يبقيها كما هي
SELECT ISNULL(COL1,0),* FROM TABLE1 WHERE ISNULL(COL1,0)=0

ليست هناك تعليقات:

إرسال تعليق