في هذا الدرس 6تصفّح المواضيع
لتضمين منطق التفرع الشرطي (if / else if / else) مباشرة داخل استعلامات SELECT أو ORDER BY أو UPDATE، يوفر معيار SQL القياسي تعبير CASE:
- الصيغة الشرطية الكاملة
CASE WHEN ... THEN ... ELSE ... END: تفحص الشروط المنطقية بالترتيب من الأعلى للأسفل، وتعيد نتيجة أول شرط يتحقق ثم تتوقف عن فحص البقية. - أهمية فرع
ELSE: إذا لم يتحقق أي شرط ولم تكتب فرعELSE، يعيد تعبيرCASEالقيمة الفارغةNULLتلقائياً. - الدالة المختصرة
IF(cond, v_true, v_false): دالة سريعة في MySQL للشرط الثنائي البسيط.
SELECT
product_id,
stock_qty,
CASE
WHEN stock_qty = 0 THEN 'Out of Stock'
WHEN stock_qty < 10 THEN 'Low Stock'
ELSE 'In Stock'
END AS inventory_status
FROM products;
من أقوى الأنماط التحليلية في لوحات التحكم الإدارية دمج الدوال التجميعية SUM() أو COUNT() مع تعبير CASE WHEN لتحويل حالات الصفوف إلى أعمدة ملخصة متجاورة في مسحة جدول واحدة:
- العد الشرطي
SUM(CASE WHEN status = 'paid' THEN 1 ELSE 0 END): يحسب عدد الطلبات المدفوعة فقط في عمود مستقل. - الجمع المالي الشرطي: يجمع مبالغ الطلبات المكتملة فقط جنباً إلى جنب مع مبالغ الطلبات المستردة في نفس صف التقرير.
SELECT
SUM(CASE WHEN status = 'paid' THEN 1 ELSE 0 END) AS paid_cnt,
SUM(CASE WHEN status = 'void' THEN 1 ELSE 0 END) AS void_cnt,
SUM(CASE WHEN status = 'paid' THEN amount ELSE 0 END) AS net_rev
FROM orders;
عندما يحتوي عمود على القيمة الفارغة NULL، نحتاج في العمليات الحسابية وواجهات العرض إلى استبداله بقيمة افتراضية بديلة:
- الدالة القياسية
COALESCE(val1, val2, ..., default_val): تقبل معاملين أو أكثر وتفحصها بالترتيب لتعيد أول قيمة غير فارغة (Non-NULL) تصادفها. - دالة
IFNULL(expr1, expr2): دالة خاصة بـ MySQL تقبل معاملين فقط؛ ويُنصح بتفضيلCOALESCE()لدعمها سلسلة بدائل متعددة وتوافقها مع معيار SQL القياسي.
SELECT
customer_id,
COALESCE(mobile_phone, home_phone, 'No Phone') AS primary_phone,
unit_price - COALESCE(discount_amount, 0.00) AS final_price
FROM customers;
تقارن دالة NULLIF(expr1, expr2) بين قيمتين، فإذا تساوتا (expr1 = expr2) تعيد القيمة الفارغة NULL، وإلا فإنها تعيد القيمة الأولى expr1 كما هي. وتبرز أهميتها في حالتين عمليتين:
- الوقاية من القسمة على صفر: كتابة
revenue / NULLIF(visits, 0)تحول المقام الصفري إلىNULL، وبدمجها معCOALESCE(..., 0)نحصل على0بأمان تام. - تحويل النصوص الفارغة إلى NULL: يحول التعبير
NULLIF(TRIM(notes), '')النص الفارغ إلىNULLحقيقي.
SELECT
campaign_id,
COALESCE(clicks / NULLIF(impressions, 0), 0) AS ctr_ratio,
NULLIF(TRIM(coupon_code), '') AS clean_coupon
FROM ad_campaigns;
عند الحاجة لتحويل نص رقمي لإجراء مقارنة حسابية دقيقة أو تحويل طابع زمني إلى تاريخ صرف، نستخدم دالة التحويل الصريح القياسية CAST(expr AS type) (أو CONVERT(expr, type)):
- الأنواع المستهدفة المدعومة في MySQL 8:
SIGNED(عدد صحيح بعلامة)، وUNSIGNED(عدد صحيح موجب)، وDECIMAL(M,D)، وCHAR، وDATE، وDATETIME، وJSON. - انتبه لصيغة الأعداد الصحيحة داخل CAST: نكتب في MySQL الصيغة
AS SIGNEDأوAS UNSIGNEDولا نكتبAS INT.
SELECT
CAST('1250.50' AS DECIMAL(10, 2)) AS exact_amount,
CAST('42' AS UNSIGNED) AS int_number,
CAST(created_at AS DATE) AS order_date_only,
CONVERT(9800, CHAR) AS code_string
FROM orders;
يلخص الجدول المرجعي التالي مقارنة شاملة بين التعبيرات الشرطية ودوال معالجة الفراغ وتحويل الأنواع في MySQL 8:
| التعبير / الدالة | الوظيفة الأساسية | التوافق القياسي | مثال تطبيقي |
|---|---|---|---|
CASE WHEN ... END | التفرع الشرطي متعدد المسارات | قياسي عالمي ANSI SQL | CASE WHEN x>0 THEN 'OK' ELSE 'No' END |
IF(cond, t, f) | شرط ثنائي مختصر | خاص بـ MySQL | IF(is_paid=1, 'Paid', 'Pending') |
COALESCE(a, b, ...) | إرجاع أول قيمة غير فارغة | قياسي عالمي ANSI SQL | COALESCE(mobile, phone, 'N/A') |
IFNULL(a, b) | بديل NULL لمعاملين فقط | خاص بـ MySQL | IFNULL(discount, 0) |
NULLIF(a, b) | تعيد NULL عند تساوي القيمتين | قياسي عالمي ANSI SQL | total / NULLIF(cnt, 0) |
CAST(x AS type) | التحويل الصريح لنوع البيانات | قياسي عالمي ANSI SQL | CAST(val AS DECIMAL(10,2)) |
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
أتقنت في هذا الدرس كتابة الشروط متعددة الفروع عبر CASE WHEN ... END، وبناء تقارير التجميع الشرطي عبر SUM(CASE ...)، ومعالجة القيم الفارغة بدالتي COALESCE() وIFNULL()، ومنع القسمة الصفرية بـ NULLIF()، والتحويل الصريح للأنواع عبر CAST().
الخطوة التالية والدرس القادم
انتقل الآن إلى الوحدة العاشرة والدرس الثامن والثلاثين «العلاقات بين الجداول واحد لواحد وواحد لمتعدد ومتعدد لمتعدد في MySQL» لتعلم هندسة العلاقات العلائقية بين الجداول.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 CASE Expressions التعبيرات الشرطية
- تعلّم التعبيرات الشرطية CASE و COALESCE وتحويل الأنواع CAST في MySQL بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
- للمراجعة
- 02 Searched CASE WHEN Expressions التعبير الشرطي CASE WHEN
- المفهوم الهندسي وصياغة استعلام SQL القياسية لقسم التعبير الشرطي CASE WHEN في MySQL 8.
- للمراجعة
- 03 Conditional Aggregation Pivoting التجميع الشرطي وبناء التقارير
- المفهوم الهندسي وصياغة استعلام SQL القياسية لقسم التجميع الشرطي وبناء التقارير في MySQL 8.
- للمراجعة
- 04 Handling NULLs with COALESCE استبدال الفارغ بدالة COALESCE
- المفهوم الهندسي وصياغة استعلام SQL القياسية لقسم استبدال الفارغ بدالة COALESCE في MySQL 8.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 ANSI ANSI
- American National Standards Institute (Standard SQL)
- المعيار القياسي للغة SQL الذي يعرف التعبيرات المحمولة CASE و COALESCE و NULLIF و CAST.
- للمراجعة
- 02 CTR CTR
- Click-Through Rate
- معدل النقر إلى الظهور ويُحسب بأمان في SQL عبر دمج COALESCE مع NULLIF لمنع القسمة على صفر.
- للمراجعة
- 03 KPI KPI
- Key Performance Indicator
- مؤشر الأداء الرئيسي في التقارير ويُبنى غالباً بنمط التجميع الشرطي SUM(CASE WHEN ...).
- للمراجعة
- 04 JSON JSON
- JavaScript Object Notation
- صيغة كائنات البيانات المهيكلة وتدعم دالة CAST في MySQL 8 التحويل المباشر إليها.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
نفّذ استعلامات SQL المشروحة في قسم التعبير الشرطي CASE WHEN داخل قاعدة بيانات MySQL 8 المحلية وتأكد من مطابقة النتائج.
-
بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم التجميع الشرطي وبناء التقارير وقارن مخرجات الاستعلام.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
ماذا يعيد التعبير الشرطي CASE WHEN إذا لم يتحقق أي شرط من شروط WHEN وتم حذف فرع ELSE؟
عند عدم تحقق أي شرط وعدم وجود فرع ELSE يعيد التعبير القيمة الفارغة NULL تلقائياً.
ما هي مخرجات الاستعلام SELECT COALESCE(NULL, NULL, "Fallback", "Last"); في MySQL؟
تعيد دالة COALESCE() أول قيمة غير فارغة تصادفها من اليسار لليمين وهي "Fallback".
ماذا تعيد الدالة NULLIF(0, 0) ولماذا تُستخدم في مقام عمليات القسمة؟
تعيد القيمة NULL عند تساوي المعاملين، مما يمنع القسمة على صفر عندما يكون المقام مساوياً لصفر.
ما هي الكلمة المفتاحية الصحيحة للنوع داخل دالة CAST(expr AS ...) في MySQL لتحويل نص إلى عدد صحيح بعلامة؟
يستخدم محرك MySQL الكلمة المفتاحية SIGNED (أو UNSIGNED) داخل دالة CAST لتحويل الأعداد الصحيحة.
يتيح دمج SUM(CASE WHEN status = "paid" THEN 1 ELSE 0 END) حساب عدد الصفوف المطابقة لشرط معين كعمود مستقل داخل استعلام واحد.
صواب؛ يُعرف هذا النمط بالتجميع الشرطي لبناء التقارير الملخصة في مسحة واحدة للجدول.
دالة COALESCE() قياسية في معيار ANSI SQL وتقبل أكثر من معاملين، بينما تقبل دالة IFNULL() معاملين فقط.
صواب؛ تدعم دالة COALESCE سلسلة بدائل متعددة وتتوافق مع جميع قواعد البيانات القياسية.
في التعبير CASE WHEN score >= 50 THEN "Pass" WHEN score >= 90 THEN "Distinction" END، ما النتيجة عند score = 95؟
يعيد "Pass" لأن CASE يتوقف عند أول شرط يتحقق من الأعلى (95 >= 50)؛ ولذلك يجب وضع الشرط الأعلى (>= 90) أولاً!
أي نوعين مما يلي يقبلان التحويل الصريح داخل دالة CAST(expr AS ...) في MySQL 8؟ (اختر إجابتين)
يدعم MySQL 8 التحويل الصريح إلى نوعي DECIMAL(10,2) و DATE.