اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

WHERE تستخدم لتصفية البيانات قبل عمليات التجميع مثل COUNT  SUM  AVG وتطبّق مباشرة على الصفوف في الجدول وتعمل على ترشيح الصفوف التي يتم أخذها في الاعتبار قبل تنفيذ أي دالة تجميعية كما لا يمكن استخدام دوال التجميع مثل COUNT و SUM مع WHERE.

SELECT name, age
FROM employees
WHERE age > 30;

فمثلا هذا الاستعلام يقوم بإحضار كل الموظفين الذين أعمارهم أكبر من 30.

في حين أنّ HAVING تستخدم لتصفية النتائج بعد تطبيق عمليات التجميع وتستخدم عادة مع GROUP BY لتصفية المجموعات بناء على شروط معينة تشمل دوال التجميع ويمكن استخدام دوال التجميع مع HAVING كالتالي:

SELECT department, COUNT(*)
FROM employees
GROUP BY department
HAVING COUNT(*) > 5;

فهذا الاستعلام يقوم بإحضار الأقسام التي تحتوي على أكثر من 5 موظفين فقط، بعد تجميع البيانات.

أي باختصار نستخدم WHERE لتصفية البيانات قبل عمليات التجميع و HAVING لتصفية البيانات بعد عمليات التجميع وعادة مع GROUP BY.

يمكنك الاطلاع على هذه الإجابات على نفس سؤالك من هنا:

  • 0
نشر

وعليكم السلام ورحمة الله وبركاته.

الفرق الرئيسي بينهما هو في كيفية ترشيح النتائج و ترتيبهم في جملة إستعلام SQL.

  • WHERE:
    • تستخدم لتصفية الصفوف قبل تطبيق عمليات التجميع aggregation (مثل SUM، AVG، إلخ).
    • يتم تطبيقها على كل صف في الجدول مباشرة.
    • لا يمكن استخدامها لتصفية نتائج دوال التجميع أو الأعمدة التي تم إنشاءه في أمر SQL ، لأنها تعمل قبل عمليات التجميع حيث تعمل على الجدول مباشرة حيث تقوم SQL بجلب البيانات فقط التي تشابه الشرط في WHERE .
    • يتم كتابتها قبل جملة GROUP BY .
SELECT column1, column2
FROM table_name
WHERE column1 > 100
GROUP BY column1
  • HAVING:
    • يُستخدم لتصفية النتائج بعد تطبيق عمليات التجميع aggregation  .
    • يتم تطبيقها شروط على دوال التجميع أو أي عمود أخر.
    • يتم كتابتها بعد جملة GROUP BY .
SELECT column1, SUM(column2)
FROM table_name
GROUP BY column1
HAVING SUM(column2) > 100;

تخيل مثلا أنه لدينا جدول للمنتجات ونحن نريد البحث عن المنتجات التي لها تصنيف إلكترونيات مثلا . هنا سنستحدم WHERE وهنا SQL ستقوم بالمرور على جميع الصفوف في الجدول و أي منتج له تصنيف إلكترونيات سيتم إختياره . تخيل بعد ذلك نحن نريد مثلا المنتج الذي من تصينيف إلكترونيات ومجموع مبيعاته مثلا 1000 . هنا سنستخدم HAVING و SQL ستقوم أولا بترشيح المنتجات بناء على التصنيف وستحتفظ بتلك النتائج كما في المثال السابق . بعد ذلك ستقوم SQL بالتجميع وبعد التجميع ستقوم بالترشيح بناء على شرط HAVING :

SELECT product_name, SUM(sales) AS total_sales ,category
FROM products
WHERE category = 'إلكترونيات'
GROUP BY product_name
HAVING SUM(sales) >= 1000;

 

إذا أولا SQL ستأتي بالنتائج من قاعدة البيانات التي لها category يسمى إلكترونيات بعد ذلك ستقوم بجمع المبيعات لجميع تلك الصفوف وبعد ذلك تقوم بعمل ترشيح ثاني بإستخدامHAVING وأخيرا تعيد النتائج النهائية.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...