أهم أقسام المدونة

الصفحات

الاثنين، 1 أغسطس 2016

فقرة الشرط Where clause


الفقرة الشرط "حيثُ" WHERE Clause:

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

ولن تكون صيغة هذه الفقرة صعبةً عليك، فصيغة الشرط الخاصة بها مماثلةً للشروط التي تعوّدت كتابتها في جملة If في لغة فيجيوال بيزيك.

والمثال التالي يسترجع كل الكتب التي يحمل مؤلفها الرقم 1 أو 3:

SELECT Book
FROM Books
WHERE AuthorID = 1 OR AuthorID = 3

ولكن من هو المؤلف رقم 1 ومن هو المؤلف رقم 3؟

هذه الطريقة تبدو عديمة الجدوى، فهي غير عمليّة في البرمجة!.. إننا تريد أن نعرف الكتب التي ألفها (توفيق الحكيم) مباشرة دونَ البحث عن رقمه أولا.. لا بأس إذن فهناك حل.. دعنا نستخدم الجملة التالية:

SELECT Book
FROM Books, Authors
WHERE Author = 'توفيق الحكيم' AND AuthorID = Authors.ID

لاحظ أننا كتبنا اسم جدول المؤلفين في الفقرة FROM رغم أن أيا من حقوله لن يظهر في النتيجة، وذلك لأننا نستخدم حقول هذا الجدول في الفقرة WHERE.

والآن هذا ما سيحدث: سيتمّ اختيار السجلات التي تحمل اسم (توفيق الحكيم) في جدول المؤلفين، ثمّ اختيار السجلات من جدول الكتب التي يتساوى فيها رقم المؤلف AuthorID مع رقم المؤلف في السجلات المختارة من جدول المؤلفين Authors.ID.. ونظرا لأنه لن يوجد سوى رقم (توفيق الحكيم) فحسب، فإن كتبه فقط هي التي سيتمّ عرضها.

ومن الممكن تبديل ترتيب جملتي الشرط فالترتيب ليس مهمّا، حيث تقوم قاعدة البيانات بتنفيذ الشروط على حسب أولويّة تنفيذها، وليس على حسب ترتيب كتابتها:

SELECT Book
FROM Books, Authors
WHERE AuthorID = Authors.ID AND Author = 'توفيق الحكيم'

والآن تعال نطوّر المثال السابق، لنحصل على كل الكتب التي ألفها (توفيق الحكيم) أو (عباس العقاد).. في هذه الحالة لا بدّ من عرض اسم المؤلف في النتيجة، وإلا تعذر معرفة مؤّلف كل كتاب:

SELECT Book, Author
FROM Books, Authors
WHERE (Author = 'توفيق الحكيم' OR Author = 'عباس العقاد')
AND AuthorID = Authors.ID

ولكن ماذا لو أردنا أن نعرض كل أسماء الكتب مع ما يناظرها من مؤلفين؟

سيكون الأمر في منتهى البساطة، فسيقتصر الشرط في هذه الحالة على تساوي رقم المؤلف في الجدولين:

SELECT Book, Author
FROM Books, Authors
WHERE AuthorID = Authors.ID
 

ملحوظة:
يمكنك استرجاع جدول فارغ بوضع شرط خاطئ أو مستحيل في الفقرة WHERE (مثل 1 = 2) كالتالي:
SELECT *
FROM Books
WHERE 1 = 2
يفيد هذا عندما تريد أن تحصل على سجل فارغ يحمل أسماء حقول الجدولة كاملة بدون بيانات، بحيث تسمح للمستخدم بإدخال سجلات جديدة، لكن دون العبث بالسجلات القديمة.

 

إنشاء الفقرة WHERE بباني الاستعلام:

لإضافة شروط على الحقول التي تريد استرجاعها في باني الاستعلام Query Builder، حدد الحقل في جزء المخطط لإضافته إلى جزء المعايير Criteria Pane.. دعنا نجرب مثلا على الحقل ID في جدول المؤلفين.

ستجد في جدول المعايير عمودا اسمه Filter.. هذا هو العمود الذي تستطيع أن تكتب فيه الشرط الذي تريده، لكن بدون كتابة اسم الحقل.. مثلا، للحصول على كتب المؤلف رقم 5، اكتب في الخانة Filter في صف الحقل ID الشرط:

= 5

ولو أردت المؤلفين الذين يزيد رقمهم عن 5، فاكتب الشرط:

> 5

وهكذا....

وإذا أردت أن تكتب شرطا آخر مرتبطا بالشرط الأوّل بالمعامل OR، فانتقل إلى العمود التالي الذي يحمل العنوان OR، واكتب الشرط الذي تريده في هذا العمود.. فإذا كان هناك المزيد من الشروط، فلديك المزيد من الأعمدة التي تحمل العنوان OR.. فمثلا، لو أردت أن تحصل على المؤلفين الذين أرقامهم 7 و 12 و 20، فاجعل صف الحقل ID في جزء المعايير يبدو كالتالي (سأقتصر على ذكر الأعمدة التي تهمنا فقط):

 

Column
Table
Filter
Or
Or
ID
Authors
= 7
= 12
= 20

 

ولكن ماذا لو أردت أن تكتب شرطا يستخدم المعامل AND؟

في هذه الحالة يجب أن يظهر هذا الشرط في صفّ جديد.. فمثلا، لو وضعت في العمود Filter شرطا على رقم المؤلف ID وشرطا على اسم المؤلف Author، فسيتم ربط الشرطين معا بالمعامل AND.

ولكن.. ماذا لو أردنا أن يظهر نفس الحقل في أكثر من شرط يربطها المعامل AND، كأن نستعلم عن كل المؤلفين ما عدا المؤلفين رقما 8 و 9؟

في هذه الحالة يجب أن نكرر اسم الحقل ID في جزء المعايير.. لفعل هذا اضغط بالفأرة في أيّ خانة فارغة في العمود المسمّى Column، ومن القائمة المنسدلة اختر الحقل Authors.ID.

الآن صار لديك صفان للعمود ID.. اكتب في العمود Filter الخاص بالحقل الأول الشرط:

<> 8

واكتب في العمود Filter الخاص بالثاني الشرط:

<> 9

ولكن ماذا لو كان هناك شرطان كل منهما على حقل مختلف، ويربطهما المعامل OR، كأن تريد اختيار المؤلف الذي رقمه 6 أو اسمه توفيق الحكيم؟

في هذه الحالة اكتب في العمود Filter الخاص بالحقل ID الشرط:

= 6

واترك العمود Filter الخاص بالحقل Author فارغا، واكتب في العمود OR الخاص به الشرط:

= 'توفيق الحكيم'

 

الخلاصة:
الشروط التي تظهر في العمود Filter في صفوف مختلفة يربطها المعامل AND، بينما الشروط التي تظهر في العمود OR يربطها المعامل OR.. ولو أردت ربط حقلين بالمعامل Or فاترك العمود Filter الخاص بأحدهما فارغا، واكتب الشرط الخاص به في العمود OR.

 
من كتاب: من الصفر إلى الاحتراف برمجة قواعد البيانات في فيجوال بيزيك دوت نت ADO .NET.. للتنزيل:

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

إرسال تعليق

ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.