تنفيذ تعليمات شرطية عبر CASE في SQL
تُعدّ جملة CASE في SQL إحدى الأدوات القوية التي تمكن المطورين من تنفيذ تعليمات شرطية في الاستعلامات داخل قواعد البيانات. يعتبر CASE بمثابة أداة مرنة للتحكم في تدفق البيانات بناءً على شروط معينة، مما يسمح بتنفيذ عمليات متنوعة على البيانات مثل إجراء الحسابات الشرطية، تصنيف القيم، أو حتى تخصيص قيم جديدة استنادًا إلى معايير محددة. في هذا المقال، سنستعرض مفهوم جملة CASE في SQL من خلال شرح شامل لكل تفاصيل استخدامها، بالإضافة إلى أمثلة تطبيقية تُوضح كيفية تنفيذ تعليمات شرطية عبرها.
مفهوم جملة CASE في SQL
جملة CASE هي عبارة عن بنية شرطية تتيح لك تطبيق شرط أو عدة شروط ضمن الاستعلامات. يعتمد عمل جملة CASE على الفكرة الأساسية للتعامل مع الشروط والمنطق الشرطي، بحيث يمكن من خلالها اتخاذ قرارات متفرقة حول القيم التي يتم استرجاعها من الجداول بناءً على معايير معينة.
في SQL، تُستخدم جملة CASE بشكل رئيسي في العبارات SELECT و UPDATE و INSERT وغيرها. يمكن استخدامها داخل الأعمدة لتحويل القيم المسترجعة أو لإجراء تعديلات معينة على النتائج المُعروضة.
بنية جملة CASE
تتبع جملة CASE في SQL بناءً أساسيًا بسيطًا، ويمكن تقسيمها إلى نوعين رئيسيين:
-
CASE البسيط (Simple CASE):
وهو يعتمد على مقارنة قيمة معينة مع قيم ثابتة لمعرفة النتيجة التي يجب إرجاعها.التركيب:
sqlCASE expression WHEN value1 THEN result1 WHEN value2 THEN result2 ELSE result_default ENDفي هذه الصيغة، يتم التحقق من قيمة
expression، وإذا كانت تساوي إحدى القيم المذكورة فيWHEN، يتم إرجاع النتيجة المقابلة لها فيTHEN. إذا لم تكن القيم مطابقة لأي من القيم فيWHEN، سيتم إرجاع القيمة الموجودة فيELSE. -
CASE المُركب (Searched CASE):
هذا النوع من جملةCASEيسمح بالتحقق من شروط أكثر تعقيدًا باستخدام تعبيرات منطقية متنوعة.التركيب:
sqlCASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ELSE result_default ENDفي هذه الصيغة، يتم التحقق من كل شرط باستخدام
WHENوإذا كان الشرط صحيحًا يتم إرجاع النتيجة المقابلة له فيTHEN. إذا لم تتحقق أي من الشروط، يتم إرجاع القيمة الافتراضية المحددة فيELSE.
استخدامات جملة CASE في SQL
هناك العديد من السيناريوهات التي يمكن أن تُستخدم فيها جملة CASE لتنفيذ تعليمات شرطية معقدة. فيما يلي بعض الاستخدامات الشائعة:
1. تصنيف البيانات بناءً على شروط معينة
يمكنك استخدام CASE لتصنيف البيانات بناءً على معايير محددة. على سبيل المثال، يمكنك تصنيف الموظفين في قاعدة بيانات إلى فئات مختلفة مثل “أعلى أداء” و”أداء متوسط” و”أداء ضعيف” استنادًا إلى درجات التقييم.
مثال:
sqlSELECT 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 لتحويل القيم استنادًا إلى الشروط. على سبيل المثال، يمكن تحويل تواريخ الاستحقاق إلى حالة الدفع التي تم بها: “مدفوعة”، “معلقة”، أو “متأخرة”.
مثال:
sqlSELECT 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 لحساب العمولات للموظفين بناءً على إجمالي المبيعات.
مثال:
sqlSELECT 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 لتحديث عدة صفوف في عملية واحدة.
مثال:
sqlUPDATE 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 لتنفيذ عمليات حسابية مع شروط. على سبيل المثال، يمكنك حساب مجموع المبيعات لشهر معين بناءً على الشرط المحدد.
مثال:
sqlSELECT
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
-
الأداء: عند استخدام
CASEفي استعلامات معقدة أو تحتوي على العديد من الشروط، قد يتسبب ذلك في تباطؤ الأداء، خاصة إذا كانت قاعدة البيانات تحتوي على عدد كبير من الصفوف. لذلك من الأفضل استخدامCASEبحذر. -
التحقق من الشروط: تأكد دائمًا من ترتيب الشروط بشكل مناسب في جملة
CASE. في حالة وجود شروط متضاربة أو متداخلة، يجب ضمان ترتيبها بالشكل الذي يضمن تحقق الشرط الصحيح أولاً. -
تعدد الحالات: يمكن أن تحتوي جملة
CASEعلى العديد من حالاتWHENلتغطية جميع السيناريوهات المحتملة. لكن يُفضل أن تكون الشروط واضحة ومحددة لتجنب الأخطاء. -
استخدام
ELSE: يفضل دائمًا استخدامELSEفي نهاية جملةCASEلتغطية الحالات التي لا تنطبق عليها أي من الشروط السابقة. إذا لم يتم تحديدELSE، فسيتم إرجاعNULLفي الحالات غير المتطابقة.
خاتمة
تُعد جملة CASE في SQL أداة مرنة ومفيدة لتنفيذ التعليمات الشرطية بطريقة فعالة وقوية. من خلال استخدامها، يمكن للمطورين إجراء عمليات معقدة تتضمن شروطًا متعددة، سواء في الاستعلامات البسيطة أو في العمليات الحسابية المعقدة. تقدم جملة CASE إمكانيات واسعة لمعالجة البيانات وتقديم نتائج دقيقة بناءً على شروط مخصصة، مما يجعلها من الأدوات الأساسية التي لا غنى عنها في العمل مع قواعد البيانات.

