الاستعلامات في MySQL - الجزء الثاني
سندرس في هذا الدرس إن شاء الله خيارات عديدة ومفيدة أثناء كتابة الاستعلام, لنبدأ على بركة الله.
# توسيع مفهوم التعليمة where :
شرحنا في الدرس (استخدام العبارة where في MySQL) بأجزائه الثلاث عن التعليمة where وكيفية عملها, والآن سنشرح أن شاء الله تفاعل where مع select .
الفرق بين and و or:
1. اكتب استعلاماً يعيد لنا جميع المعلومات عن الفيلم الذي اسمه assassins والفيلم الذي رقمه في أرشيفنا 3 .
عندما تقوم بترجمة هذا التمرين ترجمة حرفية فإنك ستكتب الاستعلام التالي:
select * from movies where mov_name='assassins' and mov_no=3
طبعاً هذا الاستعلام صحيح قواعدياً و لكنه سيعطيك نتيجة غير المتوقعة, وبدلاً من أن يعيد لك معلومات عن الفيلمين الذين طلبتهما بالاستعلام, فإنه سيعيد لك العبارة التالية Empty set , والسبب في ذلك هو الكلمة and حيث أن عمل هذه الكلمة هو تجميع الشروط المطروحة بعد العبارة where لنفس السجل أو السطر, وبالتالي فإن الملقم سيبحث عن فيلماً اسمه assassins وبنفس الوقت رقمه (أي الفيلم assassins) هو 3 , وهذا السجل غير موجود في جدولنا لذلك سيعطينا العبارة السابقة.
إذن ما هو الحل؟ الحل هو أن تستبدل الكلمة المفتاحية and بالكلمة المفتاحية or, وبالتالي سيصبح شكل الاستعلام السابق كما يلي:
select * from movies where mov_name='assassins' or mov_no=3
وعندها سيعيد لك هذا الاستعلام المعلومات التي طلبتها عن الفيلمين, حيث أن هذا الاستعلام يقول لملق البيانات أظهر لنا كل البيانات من الجدول movies بحيث اسم الفيلم assassins أو رقم الفيلم 3.
2. اكتب استعلاماً يعيد لنا الفيلم الذي اسمه assasins أو others حيث نوع الأول هو violence والثاني horror :
ستكتب الاستعلام بالصيغة التالية:
… where mov_name='assassins' and kind='violence' or mov_name='others' and kind='horror
طبعاً هذه الصيغة صحيحة وستعيد لك مرادك, ولكن من الأفضل أن تجمع عناصر الاستعلام ضمن أقواس أي كما يلي:
… where (mov_name='assassins' and kind='violence') or (mov_name='others' and kind='horror
فعندما تكتب استعلاماً معقداً, فإنك ستحتاج إلى الأقواس حتماً, حيث أن أفضلية التنفيذ هي and ثم or .
قاعدة:
- الكلمة and تستخدم لتجميع الشروط لسجل واحد, بينما تستخدم الكلمة or لوضع الشروط على أكثر من سجل.
- عند كتابة الاستعلام بشروط عديدة وتحوي كل من or , and فمن الأفضل وضع الشروط ضمن أقواسها المناسبة, مع الأخذ بعين الاعتبار أن أفضلية التنفيذ في MySQL هي للكلمة and ثم الكلمة or .
3. اكتب استعلاماً يعيد لنا أسماء وأسعار جميع أفلام العنف.
إن صيغة هذا الاستعلام هي كالتالي:
select mov_name , price from movies where kind='violence
يفيد هذا الاستعلام في إعادة جميع السجلات ذات الصفة الواحدة.