✨ تعبير CASE في SQL: أداة التحويل الذكية للبيانات

تعبير CASE هو أحد أقوى الأدوات في SQL الذي يسمح لك بإجراء تحويلات شرطية على البيانات مباشرة في استعلاماتك. فكر فيه كعبارة "if-then-else" ولكن بلغة قواعد البيانات! 🧠


📌 ما هو تعبير CASE؟

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

البناء الأساسي:

CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ...
    ELSE default_result
END

🔍 أنواع تعبير CASE

هناك نوعان رئيسيان من تعبير CASE:

1. CASE البسيط: عندما تقارن عموداً بقيمة محددة

2. CASE المُبحث: عندما تستخدم شروطاً أكثر تعقيداً ومقارنات متنوعة


💻 أمثلة عملية على CASE البسيط

لنفترض أن لدينا جدول "الموظفين" ونريد تصنيف الرواتب:

SELECT 
    name,
    salary,
    CASE 
        WHEN salary < 3000 THEN 'منخفض'
        WHEN salary BETWEEN 3000 AND 6000 THEN 'متوسط'
        ELSE 'مرتفع'
    END AS salary_category
FROM employees;

في هذا المثال، نقوم بإنشاء عمود جديد ي categorizes الرواتب إلى ثلاث فئات.


🛠️ مثال على CASE المُبحث

لنصنف المنتجات بناءً على السعر والكمية:

SELECT 
    product_name,
    price,
    quantity,
    CASE
        WHEN price > 100 AND quantity < 10 THEN 'متميز قليل الكمية'
        WHEN price <= 100 AND quantity >= 50 THEN 'شعير كثير الكمية'
        ELSE 'منتجات عادية'
    END AS product_type
FROM products;

⚠️ نصائح مهمة عند استخدام CASE

  1. الترتيب مهم: يتم تقييم الشروط بالترتيب من الأعلى للأسفل
  2. استخدم ELSE: دائماً حدد نتيجة افتراضية للقيم التي لا تنطبق عليها الشروط
  3. التسمية الواضحة: أعط أسماء واضحة للأعمدة الناتجة باستخدام AS
  4. الأداء: CASE يمكن أن يؤثر على أداء الاستعلام مع البيانات الكبيرة

🎯 متى تستخدم تعبير CASE؟

  • تصنيف البيانات إلى فئات
  • تحويل القيم الرقمية إلى نصوص وصفيّة
  • إنشاء أعمدة شرطية في النتائج
  • معالجة القيم NULL بطريقة مخصصة
  • تنفيذ عمليات حسابية شرطية

📊 مثال حي من العالم الواقعي

لنفترض أننا نريد إنشاء تقرير عن حالة الطلبات:

SELECT 
    order_id,
    order_date,
    total_amount,
    CASE
        WHEN total_amount > 1000 THEN 'طلبية كبرى'
        WHEN total_amount BETWEEN 500 AND 1000 THEN 'طلبية متوسطة'
        WHEN total_amount < 500 THEN 'طلبية صغيرة'
        ELSE 'قيد المراجعة'
    END AS order_size,
    CASE
        WHEN DATEDIFF(day, order_date, GETDATE()) > 30 THEN 'قديمة'
        ELSE 'حديثة'
    END AS order_age
FROM orders;

🚀 ماذا سنتعلم في الدرس القادم؟

في الدرس القادم، سنتعرف على "الدوال المجمعة (Aggregate Functions)" وكيفية استخدامها مع تعبير CASE لإنشاء تقارير إحصائية قوية. سنتعلم كيفية حساب المتوسطات، المجاميع، والإحصائيات الشرطية التي ستأتح قدراتك التحليلية إلى مستوى جديد! 📈