العبارة المنطقية AND في SQL
يمكن دمج عبارة WHERE مع العبارة المنطقية AND. يتم استخدام العملية AND لتصفية السجلات بناءً على أكثر من شرط واحد. تقوم العبارة المنطقية AND بعرض سجلاً إذا كانت جميع الشروط التي تفصل بينها العبارة ANDتتحقق (أي تساوي TRUE).
بناء جملة AND
الشكل العام لاستخدام وبناء أمر AND في لغة SQL (أي AND syntax) تتم كما يلي:
FROM table_name; WHERE condition1 AND condition2 AND condition3 …; |
حيث يمثل العمود الأول Column 1، والعمود الثاني Column 2أسماء حقول الجدول الذي تريد تحديد واستخراج البيانات منها عند تحقق الشرط المحدد condition1والشرط condition2والشرط الثالث condition3معاً وهكذا.
ملاحظة: لإظهار السجل المطلوب عند استخدام الأمر AND، يجب أن تتحقق جميع الشروط الواردة في القسم WHERE، وفي حال عدم تحقق شرط واحد على الأقل، فلن يتم اظهار تلك السجلات المطلوب فلترتها.
مثال على استخدام أمر AND في SQL
الجدول التالي يوضح مجموعة مختارة من جدول "الزبائن" Customers
Country | City | Address | CustomerName | CustomerID |
UK | London | 120 Hanover Sq. | John | 100 |
USA | New York | 109 E 16th St | Marry | 200 |
Jordan | Amman | Al-Mutanabbi St. | Ahmad | 300 |
USA | New York | 110 E 20th St | Ali | 400 |
Egypt | Cairo | El Tahrir St | Ahmad | 500 |
USA | New York | 109 E 16th St | Sari | 600 |
Egypt | Cairo | El Tahrir St | Adel | 700 |
Jordan | Amman | Al-Mutanabbi St. | Omar | 800 |
Egypt | Alexandria | Al Awleyaa St | Ahmad | 900 |
مثال 1: تحديد وإظهار حقول محددة ومختارة باستخدام الأمر المنطقي ANDأي ضمن أكثر من شرط معين
فرضاً أننا أردنا اظهار "رقم الزبون" CustomerIDالذي يسكن في جمهورية مصر العربية والذي اسمه Ahmad. تحدد جملة SQL التالية عمود "CustomerID" وتظهر جميع أرقام الزبائن التي تنطبق عليهم الشرطين السابقين، (أي أرقام أولئك الذين يسكنون فقط في دولة "مصر" Egyptوالتي أسمائهم "أحمد" Ahmad) من الجدول "Customers":
SELECT CustomerID FROM Customers; WHERE Country =’Egypt’ AND CustomerName = ’Ahmad’; |
ليظهر الجدول التالي:
CustomerID |
500 |
900 |
مثال 2: تحديد وإظهار جميع الحقول (الأعمدة) التي ينطبق عليها أكثر من شرط محدد باستخدام الأمر AND
فرضاً أننا أردنا اظهار جميع سجلات "اسم الزبون" CustomerNameوالتي أسمائهم Ahmadويسكنون في دولة مصر العربية Egypt وبالتحديد في مدينة القاهرة Cairo. نلاحظ هنا أنه تم استخدام ثلاثة شروط. تقوم عبارة SQLالتالية بتحديد وإظهار جميع الأعمدة (أي الحقول) من جدول "الزبائن" Customersالتي ينطبق عليها تلك الشروط كما يلي:
WHERE CustomerName = ’Ahmad’ AND Country =’Egypt’ AND City =’Cairo’; |
تعارض غير مقصود عند استخدام الأمر AND في SQL
عند التعامل مع الأمر المنطقي AND في قواعد البيانات SQL، يجب مراعاة عدم الوقوع في خطأ التعارض المنطقي عند الاستعلام عن بيانات معينة. ويحصل مثل هذا التعارض غالباً عند استخدام الأمر AND مع بيانات الحقل نفسه، مما يؤدي سلباً الى عدم ظهور أي من البيانات بعد الاستعلام. فمثلاً عند استخدام الكود البرمجي التالي في SQL للجدول أعلاه:
SELECT CustomerName FROM Customers; WHERE Country =’Egypt’ AND Country =’Jordan’; |
فلن يتم اظهار السجل المطلوب ضمن تلك الشروط المتعارضة منطقياً. فنحن بصدد طلب ارجاع وإظهار جميع السجلات التي فيها كل سجل يشمل على اسم الزبون الذي يسكن في جمهورية "مصر" Egypt وبنفس الوقت يسكن في "المملكة الأردنية الهاشمية" Jordan وهذا غير ممكن بحسب المنطق. باختصار لا يمكن منطقياً أن يشمل الحقل الخاص بالسجل الواحد على قيمتين مختلفتين بنفس الوقت.