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

متى نستخدم CASE داخل الاستعلامات؟
نلجأ إلى CASE عندما نرغب في تحويل القيم الخام داخل قاعدة البيانات إلى مخرجات أكثر فهماً. فبدلاً من عرض قيم مثل TRUE أو FALSE فقط، يمكننا إظهار رسائل مفهومة مثل: تم التسليم، أو ما يزال المطلوب غير مكتمل.
يُستخدم هذا الأسلوب كثيراً في:
- تصنيف البيانات إلى فئات.
- إظهار رسائل مخصصة بحسب حالة السجل.
- تحسين تقارير قواعد البيانات.
- تبسيط قراءة النتائج للمستخدمين غير التقنيين.
مثال عملي على بيانات الطلاب
تخيل أنك تدير مقررًا أدبيًا، ويُطلب من الطلاب تسليم مقال من أجل استيفاء متطلبات المادة. ولتتبع حالة التسليم والدرجات، قد تكون لديك بيانات مشابهة للآتي:
| معرّف الطالب | الاسم | حالة التسليم | الدرجة |
|---|---|---|---|
| 1 | John | TRUE |
86 |
| 2 | Said | TRUE |
90 |
| 3 | Alyssa | FALSE |
NULL |
| 4 | Noah | TRUE |
68 |
| 5 | Eleanor | TRUE |
95 |
| 6 | Akiko | FALSE |
NULL |
| 7 | Otto | TRUE |
76 |
| 8 | Jamal | TRUE |
85 |
| 9 | Kiara | TRUE |
88 |
| 10 | Clement | FALSE |
NULL |
كيفية كتابة جملة CASE في SQL
البنية الأساسية لجملة CASE تكون على النحو التالي:
CASE
WHEN condition THEN result
ELSE alternative_result
END
هناك عناصر أساسية لا بد من وجودها، وهي CASE وWHEN وTHEN وEND. أما ELSE فهو اختياري، لكنه مهم جداً لتغطية الحالات التي لا تنطبق عليها الشروط السابقة. كما يمكن استخدام AS لتسمية العمود الناتج باسم واضح.
وغالباً ما تُكتب جملة CASE داخل جزء SELECT من الاستعلام.
مثال أول: عرض حالة تسليم المقال برسالة مفهومة
إذا أردت عرض رسالة واضحة لكل طالب بدلاً من إظهار قيمة submitted_essay الخام، فيمكنك استخدام الاستعلام التالي:
SELECT
name,
CASE
WHEN submitted_essay IS TRUE THEN 'essay submitted!'
ELSE 'finish that essay!'
END AS status
FROM students;
في هذا المثال، يتم عرض اسم الطالب، ثم يتم إنشاء عمود جديد باسم status. إذا كانت قيمة submitted_essay تساوي TRUE فستظهر رسالة تفيد بأن المقال تم تسليمه، وإلا فستظهر رسالة تحث الطالب على إكماله.
النتيجة المتوقعة
| الاسم | الحالة |
|---|---|
| Akiko | finish that essay! |
| Clement | finish that essay! |
| Alyssa | finish that essay! |
| Said | essay submitted! |
| Eleanor | essay submitted! |
| Otto | essay submitted! |
| Noah | essay submitted! |
| Kiara | essay submitted! |
| John | essay submitted! |
| Jamal | essay submitted! |
مثال ثانٍ: استخدام عدة شروط WHEN وTHEN
في كثير من الحالات، لا تكفي مقارنة واحدة فقط. قد ترغب في إظهار تعليق مختلف حسب درجة الطالب، مع الإبقاء على رسالة خاصة بمن لم يسلّم المقال بعد. هنا تظهر قوة جملة CASE عند استخدام عدة شروط متتالية.
SELECT
name,
essay_grade,
CASE
WHEN essay_grade >= 80 THEN 'great job'
WHEN essay_grade < 80 THEN 'try harder'
ELSE 'finish that essay!'
END AS teacher_comment
FROM students;
يعرض هذا الاستعلام اسم الطالب ودرجته، ثم يضيف تعليقاً مخصصاً في العمود teacher_comment وفقاً للقواعد التالية:
- إذا كانت الدرجة أكبر من أو تساوي
80، يظهر التعليقgreat job. - إذا كانت الدرجة أقل من
80، يظهر التعليقtry harder. - إذا لم توجد درجة أساساً وكانت القيمة
NULL، فسيتم الوصول إلىELSEوتظهر رسالةfinish that essay!.
النتيجة المتوقعة
| الاسم | الدرجة | تعليق المدرس |
|---|---|---|
| Akiko | NULL |
finish that essay! |
| Clement | NULL |
finish that essay! |
| Alyssa | NULL |
finish that essay! |
| Said | 90 | great job |
| Eleanor | 95 | great job |
| Otto | 76 | try harder |
| Noah | 68 | try harder |
| Kiara | 88 | great job |
| John | 86 | great job |
| Jamal | 85 | great job |
فهم دور ELSE وNULL في جملة CASE
من النقاط المهمة عند التعامل مع CASE أن القيم الفارغة مثل NULL لا تتصرف دائماً كما يتوقع بعض المبتدئين. في المثال السابق، تم استخدام ELSE لالتقاط الحالات التي لا تنطبق عليها شروط الدرجات، وهي هنا سجلات الطلاب الذين لم يسلّموا المقال بعد.
وفي بعض السيناريوهات، قد يكون من الأفضل استخدام شرط صريح مثل IS NULL إذا كنت تريد التعامل مباشرة مع القيم الفارغة بدقة أكبر.
مثال أكثر وضوحاً للتعامل مع NULL
SELECT
name,
CASE
WHEN essay_grade IS NULL THEN 'finish that essay!'
WHEN essay_grade >= 80 THEN 'great job'
ELSE 'try harder'
END AS teacher_comment
FROM students;
هذا الأسلوب يجعل منطق الاستعلام أكثر وضوحاً، خاصة عندما يكون التعامل مع القيم الفارغة جزءاً مهماً من تحليل البيانات.
أفضل الممارسات عند استخدام CASE في SQL
- ابدأ بالشروط الأكثر تحديداً إذا كانت هناك احتمالات متداخلة.
- استخدم
ELSEدائماً تقريباً حتى لا تترك حالات غير معالجة. - اختر اسماً واضحاً للعمود الناتج باستخدام
AS. - احرص على أن تكون الرسائل أو التصنيفات الناتجة مفهومة لمن سيقرأ التقرير.
- اختبر الاستعلام على بيانات تحتوي على قيم
NULLللتأكد من صحة النتائج.
لماذا تعد جملة CASE مهمة في تحسين الاستعلامات؟
رغم أن CASE لا تهدف مباشرة إلى تحسين الأداء، فإنها تحسن جودة المخرجات بشكل كبير. فهي تتيح لك تحويل البيانات التقنية الجافة إلى معلومات قابلة للفهم السريع، وهو أمر مهم عند بناء التقارير ولوحات التحكم وأنظمة المتابعة الداخلية.
كما أنها تقلل الحاجة إلى معالجة إضافية في التطبيق نفسه، لأن جزءاً من منطق العرض يمكن تنفيذه مباشرة داخل استعلام قاعدة البيانات.
الخلاصة التقنية
تُعد جملة CASE في SQL من أكثر الأدوات العملية لكتابة استعلامات ذكية وواضحة. فهي تمنحك القدرة على تطبيق منطق شرطي مباشر داخل SELECT، سواء لعرض رسائل مخصصة أو لتصنيف النتائج أو للتعامل مع القيم مثل NULL. ومن الناحية التقنية، كلما أتقنت استخدام CASE بالشكل الصحيح، أصبحت استعلاماتك أكثر قابلية للقراءة وأسهل في التحليل والصيانة.