انتقل إلى محتوى الدرس

WHERE vs HAVING Comparison Table جدول مقارنة WHERE و HAVING

جدول مقارنة شامل بين جملتي WHERE و HAVING من حيث مرحلة التنفيذ ودعم الدوال التجميعية والفهارس.
1 صفوف تعليمية
MySQL
7 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

يوضّح الجدول التالي الفروق الجوهرية الكاملة بين جملتي WHERE و HAVING في MySQL 8:

وجه المقارنةجملة WHEREجملة HAVING
هدف التصفيةالصفوف الفردية الخام في الجدولالمجموعات الملخصة الناتجة عن التجميع
توقيت التنفيذ المنطقيقبل مرحلة GROUP BY والتجميعبعد مرحلة GROUP BY وحساب الدوال
الدوال التجميعيةممنوعة (تُطلق الخطأ Error 1111)مدعومة بالكامل (COUNT و SUM و AVG)
الأسماء المستعارة في SELECTغير متاحة للاستخداممتاحة للاستخدام في MySQL 8
استثمار فهارس B-Treeتستخدم الفهارس مباشرة لتقليص الصفوف المقروءةتفحص نتائج المجموعات المحسوبة في الذاكرة

ملخص الدرس: تعلّمت في هذا الدرس سبب رفض WHERE للدوال التجميعية، وكيفية تصفية المجموعات عبر HAVING، وطريقة الجمع بين WHERE و HAVING في استعلام واحد، وأهمية التصفية المبكرة بـ WHERE لتحسين الأداء.
الخطوة التالية والدرس القادم: نختتم وحدة التجميع في الدرس القادم بتعلّم توليد المجاميع الفرعية والكلية عبر WITH ROLLUP، وتمييز صفوف المجموع بدالة GROUPING()، وإتقان الترتيب المنطقي الكامل لتنفيذ استعلام SQL.

SQL
-- Pipeline: WHERE -> GROUP BY -> HAVING -> ORDER BY -> LIMIT
SELECT category,
       COUNT(*)        AS active_items,
       SUM(stock_qty)  AS category_stock,
       AVG(unit_price) AS avg_category_price
FROM products
WHERE is_active = 1
GROUP BY category
HAVING COUNT(*) >= 3
   AND SUM(stock_qty) >= 50
ORDER BY category_stock DESC
LIMIT 10;
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

أتقنّا في هذا الدرس تصفية المجموعات بجملة HAVING والفرق الدقيق بينها وبين WHERE في MySQL 8 مع أمثلة عملية.

الخطوة التالية والدرس القادم

أكمل التدريبات والاختبار التفاعلي أدناه قبل الانتقال إلى الدرس التالي في مسار MySQL.