السبت، 15 ديسمبر 2018

الدرس الخامس والعشرون كتابة عبارةWHERE IN باستخدام Excel Sheet

قد يبدو عنوان الدرس غريب ، ما علاقة برنامج Excel ببرمجة قواعد البيانات ؟ يمكن استخدام برنامج الاكسل للقيام بالكثير من المهام المتعلقة ببرمجة قواعد البيانات .
مثلا اذا لدينا جدول طلبيات و لدينا قائمة ب ٥٠٠ زبون نريد أن نسترجع كل الطلبيات المتعلقة بهم . برمجيا يمكن استخدام عبارة WHERE IN للقيام بذلك ولكننا سوف نضطر لكتابة ٥٠٠ اسم خلف عبارة IN وهذا سوف يأخذ وقت طويل وقد نخطئ أثناء كتابة الأسماء. يمكن أن نستخدم الاكسل لكي يساعدنا في كتابة الأسماء وكما يلي
اولا ننسخ كل الأسماء إلى ملف اكسل ونضعها في الحقل A من ملف الاكسل.
ثانيا نستخدم الدالة التالية في الحقل B  وننسخها لكي تغطي ٥٠٠ سطر من الحقل  B
="'"&A1&"',"
حيث تعمل الدالة السابق على إضافة single quotation (') قبل الاسم ثم تضيف single quotation (') و فارزة comma (,) بعد الاسم التالي سوف نحصل على الأسماء وقد تم إعدادها لكي تستخدم ضمن عبارة WHERE IN.

ثالثا . نكتب عبارة WHERE IN ونفتح قوس عبارة IN ثم ننسخ كل محتويات الحقل B من الاكسل ونلصقها خلف القوس المفتوح .
رابعا . في آخر قيمة (رقم ٥٠٠) سوف يكون هناك comma (,) زائدة نقوم بحذفها وتغلق قوس عبارة IN وننفذ الايعاز
SELECT * FROM ORDER WHERE NAME IN (
'Ahmed',
'Mohammed',
'Ali',
'Omar',
'Ashraf')

يمكن القيام بالعديد من المهام البرمجية باستخدام برنامج الاكسل . حسب تجربتي الشخصية استخدمت برنامج الاكسل لتسهيل و تسريع كتابة العديد من الايعازات البرمجية بلغة SQL و لغة  C# ولغة Kotlin for Android حيث أن استخدام برنامج الاكسل يوفر الوقت وكذلك الدقة المطلوبة في كتابة العبارات البرمجية.
بلنسبة إلى مثالنا السابق اي استرجاع طلبيات ٥٠٠ زبون يمكن القيام بذلك بعدة طرق شرحنا في هذا الدرس الطريقة الاسهل وهي استخدام عبارة WHERE IN مع الاكسل في الدرس التالي ان شاء الله.

الخميس، 6 ديسمبر 2018

الدرس الرابع والعشرون WHERE IN and NOT IN Inner Query

في الموضوع السابق تعرفنا على عبارة IN  و NOT IN  وكما ذكرنا تستخدم العبارتان لتصفية النتائج اعتمادا على مجموعة من القيم يتم تضمينها بين قوسين كما في المثال التالي

SELECT * FROM CUTOMER WHERE COUNTRY IN ('IRAQ','EYGEPT','UAE')

يمكن استخدام عبارة IN مع مجموعة من القيم ولكن هذه القيم مخزنه في جدول ثاني. مثلا جدول الزبائن يحتوي على حقل بلد الزبون وجدول الطلبيات لا يحتوي على هذا الحقل ولكن يحتوي على حقل معرف الزبون . الان اذا اردنا معرفة جميع الطلبيات الزبائن الذين هم من العراق ؟ يمكن القيام بذلك بعدة طرق ولكن هنا سوف نناقش كيفية القيام بذلك باستخدام عبارة IN . الأمر بسيط نحتاج إلى استخدام ما يعرف بالاستعلام الداخلي INNER QUERY وهذا الاستعلام يجب أن يحقق شرط واحد وهو أن بلد الزبون هو العراق ويعيد حقل واحد فقط وهو معرف الزبون . ثم نستخدم قيم معرف الزبون (والتي سوف تحتوي على فقط الزبائن من العراق) للحصول على كل الطلبيات لهذه المجموعة من الزبائن وكما يلي
SELECT * FROM ORDERS WHERE CUST_ID IN (SELECT CUST_ID FROM CUTOMER WHERE COUNTRY ='IRAQ')

ملاحظة
ORDERS= جدول الطلبيات
CUSTOMER = جدول الزبائن

يعمل الاستعلام السابق كما يلي
اولا:  يقوم الاستعلام الداخلي بأعادة قائمة تحتوي على معرف الزبائن الذين هم من العراق

(SELECT CUST_ID FROM CUTOMER WHERE COUNTRY ='IRAQ')

ثانيا : سوف تقوم عبارة IN بتصفية نتائج جدول الطلبيات  حسب حقل معرف الزبون لكي تعيد طلبيات الزبائن الذين يكون معرف الزبون الخاص بهم ضمن مجموعة القيم التي تعيدها الاستعلام الداخلي وهم للزبائن من العراق.

من المثال السابق يتضح لنا الإمكانيات الكبيرة التي تمتلكها عبارة IN حيث أن الاستعلام الداخلي يمكن أن يكون معقد جدا لتصفية النتائج حسب المتطلبات. 

كذلك يمكن استخدام NOT IN مع الاستعلام الداخلي INNER QUERY. الاستعلام التالي سوف يعيد كل طلبيات الزبائن عدى الذين هم من العراق .

SELECT * FROM ORDERS WHERE CUST_ID NOT IN (SELECT CUST_ID FROM CUTOMER WHERE COUNTRY ='IRAQ')

يعمل الاستعلام السابق كما يلي
اولا:  يقوم الاستعلام الداخلي بأعادة قائمة تحتوي على معرف الزبائن الذين هم من العراق

(SELECT CUST_ID FROM CUTOMER WHERE COUNTRY ='IRAQ')

ثانيا : سوف تقوم عبارة NOT IN بتصفية نتائج جدول الطلبيات  حسب حقل معرف الزبون لكي تعيد طلبيات الزبائن الذين يكون معرف الزبون الخاص بهم غير موجود ضمن مجموعة القيم التي تعيدها الاستعلام الداخلي وهم كل الزبائن عدى الزبائن من العراق.

الاثنين، 3 ديسمبر 2018

الدرس الثالث والعشرون WHERE IN and NOT IN

كما ذكرنا عبارة WHERE تستخدم لتصفية البيانات ضمن شروط اذا تحقق الشرط سوف يتم تضمن السطر ضمن النتائج المعادة والا فيهمل السطر. في الدروس السابقة تعلمنا كيفية استخدام WHERE لتصفية النتائج حسب قيمة واحدة. مثلا الاستعلام التالي يصفي النتائج في جدول الزبائن لإعادة كل الزبائن الذين هم من العراق

SELECT * FROM CUTOMER WHERE COUNTRY = 'IRAQ'

اذا اردنا تعديل المثال لكي نحصل على كل الزبائن من العراق ومصر والإمارات يمكن أن نستخدم العبارة IN للقيام بذلك وكما يلي

SELECT * FROM CUTOMER WHERE COUNTRY IN ('IRAQ','EYGEPT','UAE')

تعمل العبارة IN كما يلي. نقوم بوضع قائمة بالقيم التي نريد البحث عنها وتكون بين قوسين ( ) ويفصل بين القيم بفارزة (,) تعمل عبارة WHERE على مقارنة كل القيم الموجودة بعد عبارة IN مع قيم الحقل اذا كانت قيمة الحقل تتطابق مع اي من القيم المذكورة في عبارة IN سوف يتم تضمن السطر ضمن النتائج المعادة.  في المثال السابق سوف يتم تصفية النتائج لإعادة الزبائن  من العراق ومصر والإمارات.

هناك عبارة أخرى تستخدم لتصفية النتائج اعتمادا على أكثر من قيمة واحدة ولكن تعمل بشكل معاكس وهي عبارة NOT IN حيث تعمل على تصفية النتائج لإعادة كل الأسطر التي تملك قيم عدى القيم المذكورة في عبارة NOT IN.
SELECT * FROM CUTOMER WHERE COUNTRY NOT IN ('IRAQ','EYGEPT','UAE')

العبارة السابقة سوف تعيد كل الزبائن من كل البلدان عدى الزبائن من العراق ومصر والإمارات.