LIKE و IN و BETWEEN و NULL
LIKE, IN, BETWEEN, and NULL
LIKE و IN و BETWEEN و NULL
LIKE يبحث بنمط نصي. الرمز % يعني أي عدد من الأحرف. IN يفحص أن القيمة ضمن قائمة. BETWEEN يفحص نطاقاً شاملاً للطرفين — أي x BETWEEN a AND b تساوي x >= a AND x <= b. أما NULL فله قاعدة خاصة: لا تفحصه بـ= NULL; استخدم IS NULL أو IS NOT NULL.
للنطاق نصف-المفتوح (مفيد للتواريخ لتفادي مشاكل نهاية اليوم): استخدم
>= start AND < endبدلاً منBETWEEN.
NULL يعني غياب القيمة أو أنها غير معروفة. لا يساوي النص الفارغ، ولا يساوي الصفر. هذه النقطة مهمة جداً في التقارير. إذا تجاهلت NULL، قد تظهر أرقام ناقصة أو شروط لا تعمل كما تتوقع.
مثال عملي
العميلة التي city لها NULL لن تظهر لأنها لا تطابق القائمة.
تعامل صريح مع NULL
لو أردت العملاء دون مدينة، اكتب WHERE city IS NULL. لا تعتمد على المقارنات العادية.
COALESCE و IFNULL و NULLIF — بدائل لـ NULL
SQL يوفر دوالاً للتعامل مع NULL في التعابير لا في الشروط:
| الدالة | الدعم | الفائدة |
|---|---|---|
COALESCE(a, b, c) | كل القواعد | أول قيمة غير NULL في القائمة |
IFNULL(a, b) | SQLite / MySQL | إذا كان a NULL أعد b (معادلة ثنائية لـ COALESCE) |
NULLIF(a, b) | كل القواعد | أعد NULL إذا كان a = b، وإلا أعد a |
مثال:
-- أظهر 'غير محدد' بدلاً من NULL في عمود city
SELECT name, COALESCE(city, 'غير محدد') AS city_label
FROM customers;
-- IFNULL مكافئة في SQLite
SELECT name, IFNULL(city, 'غير محدد') AS city_label
FROM customers;
COALESCE هي الخيار المحمول عبر قواعد البيانات. استخدم IFNULL فقط في كود مربوط بـSQLite أو MySQL.