0Pricing
SQL Academy · درس

IS NULL وIS NOT NULL وCOALESCE

اكتشف قيم NULL باستخدام IS NULL، واستبدلها باستخدام COALESCE وNULLIF، وصمّم استعلامات تتعامل بسلاسة مع البيانات المفقودة.

IS NULL وIS NOT NULL وCOALESCE درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.

التحقق من NULL

استخدموا IS NULL وIS NOT NULL — ولا تستخدموا = NULL مطلقًا:

SELECT * FROM users WHERE deleted_at IS NULL;
SELECT * FROM users WHERE deleted_at IS NOT NULL;

لماذا يفشل = NULL بصمت

تؤدي مقارنة أي شيء بـ NULL إلى NULL (غير معروف). ويُحذف الصف، لكنكم لا تحصلون على خطأ، فتصل المشكلة إلى الإنتاج:

SELECT * FROM users WHERE deleted_at = NULL;
-- → returns 0 rows, always

COALESCE: أول قيمة غير NULL

تأخذ COALESCE أي عدد من الوسائط، وتُرجع أول وسيط لا يساوي NULL:

SELECT id,
       COALESCE(nickname, full_name, email, 'Anonymous') AS display_name
FROM users;

استخدام COALESCE في WHERE

استخدموا COALESCE لتحويل NULL إلى قيمة افتراضية قابلة للفرز أو المقارنة:

-- Treat NULL last_login_at as the epoch:
SELECT * FROM users
ORDER BY COALESCE(last_login_at, '1970-01-01') DESC;

NULLIF: العكس

تُرجع NULLIF(a, b) القيمة NULL عندما تكون a = b، وإلا فتُرجع a:

-- Treat 0 as missing so AVG ignores it:
SELECT AVG(NULLIF(price, 0)) FROM products;

-- Convert empty string to NULL on insert:
INSERT INTO contacts (phone) VALUES (NULLIF(:phone, ''));

استخدام CASE للقيم الافتراضية الشرطية

يُعد CASE البديل العام عندما لا يكون COALESCE مرنًا بما يكفي:

SELECT id,
  CASE
    WHEN status IS NULL OR status = '' THEN 'unknown'
    WHEN status = 'A' THEN 'active'
    ELSE status
  END AS status_label
FROM users;

NULL في CHECK والقيود

ينجح قيد CHECK عندما يكون الشرط NULL. لذلك صرّحوا بوضوح إذا كنتم بحاجة إلى منع NULL:

CREATE TABLE prices (
  amount NUMERIC(10,2),
  CHECK (amount > 0)        -- amount = NULL passes!
);

-- Better:
CREATE TABLE prices2 (
  amount NUMERIC(10,2) NOT NULL CHECK (amount > 0)
);

NULL في JOIN ON

لا تتطابق أزواج الصفوف التي يكون مفتاح الربط فيها NULL مطلقًا، لأن NULL = NULL تساوي NULL. استخدموا IS NOT DISTINCT FROM إذا أردتم اعتبار NULL مساويًا لـ NULL:

SELECT * FROM a JOIN b ON a.key IS NOT DISTINCT FROM b.key;

قيم NULL وUNIQUE

يعامل SQL القياسي قيم NULL على أنها متميزة في قيود UNIQUE، لذا يمكن أن تكون لديكم عدة صفوف تحتوي على NULL:

CREATE TABLE invites (
  id BIGSERIAL PRIMARY KEY,
  email VARCHAR(255) UNIQUE
);
INSERT INTO invites (email) VALUES (NULL), (NULL); -- both succeed!

مراجعة القيم NULL والدوال التجميعية

تتجاهل الدوال التجميعية القيم NULL، باستثناء COUNT(*).

SELECT COUNT(*)            FROM users;  -- all rows
SELECT COUNT(email)        FROM users;  -- rows where email IS NOT NULL
SELECT COUNT(DISTINCT id)  FROM users;

صرّحوا دائمًا بـ NOT NULL متى أمكن

يُعد NOT NULL أبسط ضمان للصحة وأقواها. أضيفوه إلى كل عمود يجب ألا يكون فارغًا مطلقًا.

مراجعة

تُعد معالجة NULL أكبر مصدر للأخطاء الخفية في SQL.

  • تحققوا باستخدام IS NULL
  • استبدلوا القيم باستخدام COALESCE
  • حوّلوا القيمة المميّزة إلى NULL باستخدام NULLIF
  • اجعلوا NOT NULL هو الإعداد الافتراضي

تحقق سريع

أي تعبير يُرجع email إذا لم تكن NULL، وإلا يُرجع القيمة الحرفية 'no-email'؟

الأسئلة الشائعة

هل درس «IS NULL وIS NOT NULL وCOALESCE» مجاني؟

نعم — نص درس «IS NULL وIS NOT NULL وCOALESCE» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.

ماذا ستتعلم في «IS NULL وIS NOT NULL وCOALESCE»؟

اكتشف قيم NULL باستخدام IS NULL، واستبدلها باستخدام COALESCE وNULLIF، وصمّم استعلامات تتعامل بسلاسة مع البيانات المفقودة. تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟

لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «IS NULL وIS NOT NULL وCOALESCE»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟

نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أنماط LIKE والمحارف البديلة
  2. IN وNOT IN للمجموعات
  3. BETWEEN للنطاقات
  4. IS NULL وIS NOT NULL وCOALESCE
← العودة إلى SQL Academy