البرمجة

استخدام جملة CASE في SQL

تنفيذ تعليمات شرطية عبر CASE في SQL

تُعدّ جملة CASE في SQL إحدى الأدوات القوية التي تمكن المطورين من تنفيذ تعليمات شرطية في الاستعلامات داخل قواعد البيانات. يعتبر CASE بمثابة أداة مرنة للتحكم في تدفق البيانات بناءً على شروط معينة، مما يسمح بتنفيذ عمليات متنوعة على البيانات مثل إجراء الحسابات الشرطية، تصنيف القيم، أو حتى تخصيص قيم جديدة استنادًا إلى معايير محددة. في هذا المقال، سنستعرض مفهوم جملة CASE في SQL من خلال شرح شامل لكل تفاصيل استخدامها، بالإضافة إلى أمثلة تطبيقية تُوضح كيفية تنفيذ تعليمات شرطية عبرها.

مفهوم جملة CASE في SQL

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

في SQL، تُستخدم جملة CASE بشكل رئيسي في العبارات SELECT و UPDATE و INSERT وغيرها. يمكن استخدامها داخل الأعمدة لتحويل القيم المسترجعة أو لإجراء تعديلات معينة على النتائج المُعروضة.

بنية جملة CASE

تتبع جملة CASE في SQL بناءً أساسيًا بسيطًا، ويمكن تقسيمها إلى نوعين رئيسيين:

  1. CASE البسيط (Simple CASE):
    وهو يعتمد على مقارنة قيمة معينة مع قيم ثابتة لمعرفة النتيجة التي يجب إرجاعها.

    التركيب:

    sql
    CASE expression WHEN value1 THEN result1 WHEN value2 THEN result2 ELSE result_default END

    في هذه الصيغة، يتم التحقق من قيمة expression، وإذا كانت تساوي إحدى القيم المذكورة في WHEN، يتم إرجاع النتيجة المقابلة لها في THEN. إذا لم تكن القيم مطابقة لأي من القيم في WHEN، سيتم إرجاع القيمة الموجودة في ELSE.

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

    التركيب:

    sql
    CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ELSE result_default END

    في هذه الصيغة، يتم التحقق من كل شرط باستخدام WHEN وإذا كان الشرط صحيحًا يتم إرجاع النتيجة المقابلة له في THEN. إذا لم تتحقق أي من الشروط، يتم إرجاع القيمة الافتراضية المحددة في ELSE.

استخدامات جملة CASE في SQL

هناك العديد من السيناريوهات التي يمكن أن تُستخدم فيها جملة CASE لتنفيذ تعليمات شرطية معقدة. فيما يلي بعض الاستخدامات الشائعة:

1. تصنيف البيانات بناءً على شروط معينة

يمكنك استخدام CASE لتصنيف البيانات بناءً على معايير محددة. على سبيل المثال، يمكنك تصنيف الموظفين في قاعدة بيانات إلى فئات مختلفة مثل “أعلى أداء” و”أداء متوسط” و”أداء ضعيف” استنادًا إلى درجات التقييم.

مثال:

sql
SELECT employee_id, employee_name, CASE WHEN performance_score > 90 THEN 'High Performer' WHEN performance_score BETWEEN 70 AND 90 THEN 'Average Performer' ELSE 'Low Performer' END AS performance_category FROM employees;

في هذا المثال، يتم تصنيف الموظفين استنادًا إلى درجات أدائهم. إذا كانت الدرجة أكثر من 90، يتم تصنيف الموظف على أنه “أعلى أداء”، وإذا كانت بين 70 و 90 يتم تصنيفه “أداء متوسط”، وفي أي حالة أخرى يتم تصنيفه على أنه “أداء ضعيف”.

2. تحويل القيم استنادًا إلى شروط

من الممكن استخدام CASE لتحويل القيم استنادًا إلى الشروط. على سبيل المثال، يمكن تحويل تواريخ الاستحقاق إلى حالة الدفع التي تم بها: “مدفوعة”، “معلقة”، أو “متأخرة”.

مثال:

sql
SELECT invoice_id, due_date, CASE WHEN due_date < CURRENT_DATE THEN 'Overdue' WHEN due_date = CURRENT_DATE THEN 'Due Today' ELSE 'Upcoming' END AS payment_status FROM invoices;

في هذا المثال، يتم تحديد حالة الفاتورة بناءً على تاريخ استحقاقها مقارنةً بالتاريخ الحالي. إذا كانت الفاتورة قد استحقت الدفع بالفعل، يتم تصنيفها كـ “متأخرة”، وإذا كانت استحقت الدفع في نفس اليوم، يتم تصنيفها كـ “معلقة”، وإذا كانت الاستحقاق في المستقبل، يتم تصنيفها كـ “قادمة”.

3. إجراء عمليات حسابية مع شرط

يمكنك استخدام جملة CASE لإجراء عمليات حسابية تعتمد على شروط معينة. على سبيل المثال، يمكن استخدام CASE لحساب العمولات للموظفين بناءً على إجمالي المبيعات.

مثال:

sql
SELECT employee_id, total_sales, CASE WHEN total_sales > 100000 THEN total_sales * 0.1 WHEN total_sales BETWEEN 50000 AND 100000 THEN total_sales * 0.05 ELSE total_sales * 0.02 END AS commission FROM sales;

هنا، يتم حساب العمولة للموظفين بناءً على إجمالي المبيعات. إذا كانت المبيعات تتجاوز 100000، يتم احتساب عمولة 10%، وإذا كانت بين 50000 و100000، يتم احتساب عمولة 5%، وإذا كانت المبيعات أقل من 50000، يتم احتساب عمولة 2%.

4. تعديل بيانات في جملة UPDATE

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

مثال:

sql
UPDATE products SET price = CASE WHEN category = 'Electronics' THEN price * 1.10 WHEN category = 'Furniture' THEN price * 1.05 ELSE price * 1.02 END WHERE price < 1000;

في هذا المثال، يتم تحديث أسعار المنتجات بناءً على فئاتها. يتم زيادة السعر بنسبة 10% للمنتجات الإلكترونية، و5% للمنتجات المخصصة للأثاث، و2% للمنتجات الأخرى، ولكن فقط للمنتجات التي يقل سعرها عن 1000.

5. دمج جملة CASE مع دوال أخرى

يمكنك دمج جملة CASE مع دوال أخرى مثل SUM أو AVG لتنفيذ عمليات حسابية مع شروط. على سبيل المثال، يمكنك حساب مجموع المبيعات لشهر معين بناءً على الشرط المحدد.

مثال:

sql
SELECT MONTH(sale_date) AS sale_month, SUM(CASE WHEN product_category = 'Clothing' THEN sale_amount ELSE 0 END) AS clothing_sales, SUM(CASE WHEN product_category = 'Electronics' THEN sale_amount ELSE 0 END) AS electronics_sales FROM sales GROUP BY MONTH(sale_date);

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

ملاحظات وأفضل الممارسات عند استخدام جملة CASE في SQL

  1. الأداء: عند استخدام CASE في استعلامات معقدة أو تحتوي على العديد من الشروط، قد يتسبب ذلك في تباطؤ الأداء، خاصة إذا كانت قاعدة البيانات تحتوي على عدد كبير من الصفوف. لذلك من الأفضل استخدام CASE بحذر.

  2. التحقق من الشروط: تأكد دائمًا من ترتيب الشروط بشكل مناسب في جملة CASE. في حالة وجود شروط متضاربة أو متداخلة، يجب ضمان ترتيبها بالشكل الذي يضمن تحقق الشرط الصحيح أولاً.

  3. تعدد الحالات: يمكن أن تحتوي جملة CASE على العديد من حالات WHEN لتغطية جميع السيناريوهات المحتملة. لكن يُفضل أن تكون الشروط واضحة ومحددة لتجنب الأخطاء.

  4. استخدام ELSE: يفضل دائمًا استخدام ELSE في نهاية جملة CASE لتغطية الحالات التي لا تنطبق عليها أي من الشروط السابقة. إذا لم يتم تحديد ELSE، فسيتم إرجاع NULL في الحالات غير المتطابقة.

خاتمة

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