0Pricing
SQL Interview Prep · درس

تعبيرات CASE في SELECT

كتابة المنطق الشرطي المضمّن وصيغتي CASE البسيطة والمبحوثة

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

CASE: التعبير الشرطي في SQL

تشبه CASE بنية if/then/else في SQL، لكنها تعبير يعيد قيمة واحدة، ولذلك تعمل حيثما يمكن استخدام قيمة: في SELECT وWHERE وORDER BY وحتى داخل دوال التجميع.

SELECT order_id,
       amount,
       CASE WHEN amount > 100 THEN 'large' ELSE 'small' END AS size
FROM orders;

صيغة CASE البحثية

تتحقق CASE البحثية من شرط منطقي لكل WHEN، وتعيد نتيجة أول تطابق. وهي الصيغة الأكثر مرونة، ويهم فيها الترتيب؛ إذ يفوز أول شرط صحيح.

SELECT score,
       CASE
         WHEN score >= 90 THEN 'A'
         WHEN score >= 80 THEN 'B'
         WHEN score >= 70 THEN 'C'
         ELSE 'F'
       END AS grade
FROM exam_results;

صيغة CASE البسيطة

تقارن CASE البسيطة تعبيرًا واحدًا بقائمة من القيم. وهي أقصر عند إجراء مقارنات المساواة، لكنها لا تستطيع التعامل مع النطاقات أو اختبارات NULL.

SELECT status_code,
       CASE status_code
         WHEN 1 THEN 'active'
         WHEN 2 THEN 'paused'
         WHEN 3 THEN 'closed'
         ELSE 'unknown'
       END AS status_label
FROM accounts;

CASE البحثية مقابل البسيطة: متى تستخدم كلًا منهما

استخدم CASE البسيطة للمقارنة مع قيم ثابتة، واستخدم CASE البحثية للنطاقات أو NULL. انتبه إلى المشكلة الأساسية: لا يمكن لـ CASE البسيطة مطابقة NULL مطلقًا؛ استخدم IS NULL في الصيغة البحثية.

-- Simple CASE will NOT catch NULL here
SELECT CASE WHEN bonus IS NULL THEN 'no bonus'
            ELSE 'has bonus'
       END AS bonus_flag
FROM employees;

ترتيب فروع WHEN مهم

بما أن أول فرع مطابق هو الفائز، رتّب فروع WHEN من الأكثر تحديدًا إلى الأقل تحديدًا. فإذا وضعت عتبة عامة أولًا، فسيُصنَّف التقييم 95 بطريقة خاطئة.

-- Correct order: highest threshold first
SELECT CASE
         WHEN score >= 90 THEN 'A'
         WHEN score >= 80 THEN 'B'
         ELSE 'C or below'
       END AS grade
FROM exam_results;

ELSE وNULL الضمنية

إذا لم يطابق أي شيء وتجاوزت ELSE، تعيد CASE القيمة NULL. أضف ELSE صريحة للقيمة الافتراضية حتى لا تتحول القيم غير المتوقعة إلى NULL دون ملاحظة.

-- No ELSE: anything not 1/2 becomes NULL
SELECT CASE flag WHEN 1 THEN 'yes' WHEN 2 THEN 'no' END AS label
FROM toggles;

التجميع الشرطي (نمط Pivot)

من أكثر حيل المقابلات قيمةً: التجميع الشرطي. ضع CASE داخل SUM أو COUNT لعدّ الصفوف حسب الفئة في مرور واحد، وإنشاء تقرير مرتب بأسلوب Pivot.

SELECT
  SUM(CASE WHEN status = 'paid'    THEN 1 ELSE 0 END) AS paid_orders,
  SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END) AS pending_orders,
  SUM(CASE WHEN status = 'paid'    THEN amount ELSE 0 END) AS paid_revenue
FROM orders;

تتجاهل COUNT قيم NULL: اختصار باستخدام CASE

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

SELECT
  COUNT(CASE WHEN status = 'paid' THEN 1 END)    AS paid_orders,
  COUNT(CASE WHEN status = 'pending' THEN 1 END) AS pending_orders
FROM orders;

استخدام CASE في ORDER BY للفرز المخصص

ضع CASE في ORDER BY للفرز حسب أولوية مخصصة بدلًا من الترتيب الأبجدي أو الرقمي المعتاد، مثل وضع العاجل قبل العادي قبل كل شيء آخر.

SELECT order_id, status
FROM orders
ORDER BY
  CASE status
    WHEN 'urgent' THEN 1
    WHEN 'normal' THEN 2
    ELSE 3
  END,
  order_id;

اتساق الأنواع بين الفروع

يجب أن تعيد جميع فروع CASE نوعًا متوافقًا. قد يؤدي خلط رقم بسلسلة نصية إلى حدوث خطأ أو فرض تحويل للنوع؛ اختر نوعًا واحدًا للمخرجات، وحوّل النوع صراحةً عند الحاجة.

-- Keep branches the same type
SELECT CASE WHEN qty > 0 THEN CAST(qty AS VARCHAR)
            ELSE 'none'
       END AS qty_label
FROM inventory;

استخدام CASE في WHERE للتصفية الشرطية

يتيح لك CASE في WHERE تطبيق منطق تصفية مختلف بناءً على علامة، مثل استخدام حد مختلف للسعر لكل منطقة. وغالبًا ما يكون ذلك أوضح من تشابك عوامل AND وOR.

SELECT order_id, amount, region
FROM orders
WHERE amount > CASE region
                 WHEN 'US'  THEN 100
                 WHEN 'EU'  THEN 90
                 ELSE 50
               END;

اختبار سريع

تنبّأ بالنتيجة.

مراجعة

مراجعة: تعيد CASE قيمة واحدة، وتعمل في SELECT وWHERE وORDER BY ودوال التجميع. تتعامل الصيغة البحثية مع النطاقات وNULL، ويفوز أول تطابق، ويعني عدم وجود تطابق إعادة NULL، واحرص على توافق أنواع الفروع.

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

هل درس «تعبيرات CASE في SELECT» مجاني؟

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

ماذا ستتعلم في «تعبيرات CASE في SELECT»؟

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

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

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

كم من الوقت يستغرق درس «تعبيرات CASE في SELECT»؟

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

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

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

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

  1. إسقاط الأعمدة ومشكلات التسمية المستعارة
  2. الأعمدة المحسوبة وأسبقية التعبيرات
  3. DISTINCT مقابل GROUP BY للتفرّد
  4. تعبيرات CASE في SELECT
← العودة إلى SQL Interview Prep