المعاملات IN و BETWEEN في SQL

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

المعامل IN

يتحقق IN مما إذا كانت قيمة العمود تساوي أياً من القيم الموجودة في قائمة محددة. وهو بديل أنيق لسلسلة طويلة من شروط OR المتساوية.

SELECT * FROM users
WHERE country IN ('مصر', 'السعودية', 'الإمارات');

هذا الاستعلام يكافئ كتابة: country = ‘مصر’ OR country = ‘السعودية’ OR country = ‘الإمارات’، لكنه أوضح وأقصر.

النفي باستخدام NOT IN

يمكن عكس المنطق باستخدام NOT IN لإرجاع الصفوف التي لا تساوي قيمتها أياً من عناصر القائمة:

SELECT * FROM products
WHERE category NOT IN ('كتب', 'ملابس');

المعامل BETWEEN

يختبر BETWEEN وقوع القيمة ضمن مدى بين حدّين، وهو يشمل الحدّين معاً. يعمل مع الأرقام والتواريخ والنصوص على حدٍّ سواء.

SELECT * FROM products
WHERE price BETWEEN 100 AND 500;

يكافئ هذا الشرط: price >= 100 AND price <= 500. ومن أكثر استخداماته فائدةً التصفية حسب نطاق تواريخ:

SELECT * FROM orders
WHERE created_at BETWEEN '2025-01-01' AND '2025-12-31';

أخطاء شائعة

  • نسيان أن BETWEEN يشمل الحدّين، فيُحسب الحد الأعلى ضمن النتيجة دون قصد.
  • عكس ترتيب الحدّين في BETWEEN (الأكبر قبل الأصغر)، ما يعطي نتيجة فارغة.
  • استخدام NOT IN مع قائمة تحتوي قيمة NULL، ما قد يُرجع نتيجة فارغة بشكل غير متوقع.

تمرين محلول

المطلوب: من جدول users، اعرض المستخدمين الذين تتراوح أعمارهم بين 18 و30، ويقيمون في مصر أو الإمارات.

SELECT * FROM users
WHERE age BETWEEN 18 AND 30
AND country IN ('مصر', 'الإمارات');

دمجنا BETWEEN لتحديد نطاق العمر مع IN لتحديد الدول، وربطناهما بـ AND ليتحقق الشرطان معاً.

الخلاصة

يجعل المعاملان IN وBETWEEN الاستعلامات أقصر وأوضح: IN لاختبار العضوية ضمن قائمة، وBETWEEN لاختبار الوقوع ضمن مدى شامل للحدّين. واستخدامهما بدقة يقلّل الأخطاء ويجعل شروط WHERE أسهل قراءةً وصيانةً.