0Pricing
SQL Academy · درس

COALESCE وNULLIF

وفّر قيمًا افتراضية وتجنّب القسمة على صفر

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

استبدال القيم المفقودة

اكتشاف قيم NULL هو نصف المهمة، — فكثيرًا ما تريد استبدالها بقيمة افتراضية مناسبة. تنفّذ دالة COALESCE في SQL ذلك تحديدًا.

وعندما تريد إنشاء قيمة NULL عمدًا، مثلًا لتجنب القسمة على صفر، تكون NULLIF هي الأداة المناسبة. يغطي هذا الدرس كلتا الدالتين.

-- Show a placeholder when phone is missing
SELECT name, COALESCE(phone, 'no phone on file') AS phone
FROM customers;

آلية عمل COALESCE

تتلقى COALESCE أي عدد من الوسائط، وتُرجع أول وسيط غير NULL من اليسار إلى اليمين.

إذا كانت جميع الوسائط NULL، تكون النتيجة NULL. فكّر فيها على أنها: «استخدم هذه القيمة، أو تلك، أو أخيرًا هذه القيمة البديلة».

SELECT
  COALESCE(NULL, NULL, 'third', 'fourth') AS a, -- 'third'
  COALESCE(NULL, 42)                       AS b, -- 42
  COALESCE(NULL, NULL)                     AS c; -- NULL

تسلسل القيم البديلة

بما أن COALESCE تقبل عدة وسائط، يمكنك إنشاء سلسلة من التفضيلات.

مثلًا، اختر رقم الهاتف المحمول أولًا، ثم رقم العمل، ثم رقم المنزل، وأخيرًا رسالة نصية حرفية.

SELECT name,
  COALESCE(mobile, work_phone, home_phone, 'unreachable') AS best_contact
FROM contacts;

القيم الافتراضية في العمليات الحسابية

تنتقل قيمة NULL عبر العمليات الحسابية، لذلك يمكن لقيمة واحدة مفقودة أن تجعل نتيجة العملية الحسابية بأكملها NULL. غلّف المدخل الذي قد يكون NULL باستخدام COALESCE لاستبداله بقيمة محايدة.

في هذه الحالة، تُعامل قيمة الخصم المفقودة على أنها 0.

-- Without COALESCE, a NULL discount makes total NULL
SELECT
  price - COALESCE(discount, 0) AS total
FROM line_items;

قواعد الأنواع في COALESCE

يجب أن تكون جميع وسائط COALESCE من أنواع متوافقة. يختار PostgreSQL نوعًا مشتركًا، ويُصدر خطأً إذا تعذّر عليه ذلك.

مثلًا، لا يمكنك مزج رقم مع سلسلة نصية حرة من دون تحويل نوع، إذ يجب أن تكون القيمة البديلة رقمًا أيضًا.

-- OK: both integers
SELECT COALESCE(score, 0) FROM results;

-- Cast when mixing types
SELECT COALESCE(score::text, 'n/a') FROM results;

تعرّف إلى NULLIF

تعمل NULLIF(a, b)، من حيث الفكرة، بعكس COALESCE: فهي تُرجع NULL عندما تكون a = b، وإلا تُرجع a.

إنها طريقة موجزة لتحويل قيمة «حارسة» محددة إلى NULL حقيقية.

SELECT
  NULLIF(5, 5)   AS a,  -- NULL (equal)
  NULLIF(5, 9)   AS b,  -- 5    (not equal)
  NULLIF('', '') AS c;  -- NULL (treat empty string as missing)

استخدام NULLIF لتجنب القسمة على صفر

الاستخدام الكلاسيكي لـ NULLIF هو تجنب أخطاء القسمة. تؤدي القسمة على 0 إلى حدوث خطأ، أما القسمة على NULL فتعطي ببساطة قيمة NULL.

غلّف المقسوم عليه باستخدام NULLIF(divisor, 0) لتحويل الخطأ إلى قيمة NULL آمنة.

-- If total_visits is 0, this would error.
-- NULLIF turns the divisor into NULL, giving a NULL ratio instead.
SELECT
  conversions / NULLIF(total_visits, 0) AS conversion_rate
FROM campaigns;

الجمع بين NULLIF وCOALESCE

تتوافق NULLIF وCOALESCE بشكل جيد. استخدم NULLIF لتحويل القيمة الحارسة إلى NULL، ثم استخدم COALESCE لمنح قيمة NULL الافتراضية المناسبة.

في هذه الحالة، تتحول الملاحظة ذات السلسلة الفارغة إلى النص الحرفي «—».

-- Treat '' as missing, then display a dash
SELECT
  COALESCE(NULLIF(note, ''), '—') AS display_note
FROM tickets;

النسبة الآمنة للمتوسط

اجمع هذه التقنيات لإنشاء استعلام تحليلي متين: احمِ الاستعلام من القسمة على صفر باستخدام NULLIF، ثم اعرض 0 بدلًا من NULL باستخدام COALESCE.

لا يُصدر الاستعلام أي أخطاء، ويعرض دائمًا رقمًا واضحًا.

SELECT
  product_id,
  COALESCE(returns / NULLIF(orders, 0), 0) AS return_rate
FROM product_stats;

COALESCE في مقابل IS NULL

تتعامل كلتاهما مع قيم NULL، لكن لكل منهما هدف مختلف:

  • IS NULL / IS NOT NULL — اختبار وجود القيم المفقودة في شرط.
  • COALESCE — استبدال قيمة في الناتج.

استخدم COALESCE عند تشكيل النتائج، واستخدم IS NULL عند التصفية.

-- Filter (IS NULL)
SELECT * FROM customers WHERE phone IS NULL;

-- Substitute (COALESCE)
SELECT COALESCE(phone, 'unknown') FROM customers;

جمع المفاهيم

مرجع سريع لهذا الدرس:

  • COALESCE(a, b, c) → أول قيمة غير NULL.
  • NULLIF(a, b) → NULL عند التساوي، وإلا a.
  • استخدم NULLIF(divisor, 0) لتجنب القسمة على صفر.
  • استخدم COALESCE لتوفير قيم افتراضية في العمليات الحسابية والناتج.
SELECT
  COALESCE(nickname, full_name, 'guest')       AS display_name,
  revenue / NULLIF(orders, 0)                  AS avg_order_value
FROM accounts;

تحقق سريع

ماذا تُرجع NULLIF(amount, 0) عندما تكون قيمة amount هي 0؟

مراجعة

يمكنك الآن استبدال قيم NULL بقيم افتراضية باستخدام COALESCE، حيث تفوز أول قيمة غير NULL، وإنشاء قيم NULL عمدًا باستخدام NULLIF، التي تُرجع NULL عند تطابق قيمتين.

رأيت نمط تجنب القسمة على صفر، وكيفية تسلسل الدالتين معًا للحصول على ناتج آمن وواضح. ستستكشف بعد ذلك كيفية تعامل COUNT وSUM وعمليات JOIN مع قيم NULL.

SELECT
  COALESCE(NULLIF(comment, ''), 'no comment') AS comment,
  total / NULLIF(qty, 0)                       AS unit_price
FROM invoices;

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

هل درس «COALESCE وNULLIF» مجاني؟

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

ماذا ستتعلم في «COALESCE وNULLIF»؟

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

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

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

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

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

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

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

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

  1. ما الذي يعنيه NULL فعليًا
  2. IS NULL وIS NOT NULL
  3. COALESCE وNULLIF
  4. قيم NULL في التجميعات والضم
← العودة إلى SQL Academy