تتم مناقشة عبارات WHERE وHAVING بعمق في هذه المقالة. يتم استخدامها أيضًا لتصفية السجلات في استعلامات SQL. الفرق بين عبارة WHERE وHAVING هو السؤال الأكثر شيوعًا الذي يتم طرحه خلال وقت المقابلة. والفرق الرئيسي بينهما هو أن جملة WHERE تستخدم لتحديد شرط لتصفية السجلات قبل إجراء أي مجموعات، في حين يتم استخدام جملة HAVING لتحديد شرط لتصفية القيم من مجموعة. قبل إجراء المقارنة، سوف نعرف أولا هذه SQL شروط.
كيفية البحث عن الارقام المحظورة على الاندرويد
حيث الشرطية
يتم استخدام عبارة WHERE في MySQL مع SELECT، إدراج , تحديث ، و يمسح استعلامات لتصفية البيانات من الجدول أو العلاقة. وهو يصف حالة معينة عند استرداد السجلات من جدول واحد أو جداول متعددة باستخدام جملة JOIN. إذا تم استيفاء الشرط المحدد، فسيتم إرجاع القيمة المحددة من الجدول. تضع جملة WHERE الشروط على الأعمدة المحددة.
يمكن أيضًا استخدام جملة WHERE في MySQL تنفيذ الروابط المنطقية و، أو، وليس. وهي معروفة باسم الشرط المنطقي الذي يجب أن يكون حقيقي لاسترداد البيانات. تستخدم تعبيرات الوصلات المنطقية عوامل المقارنة كما تريد معاملاتها<, ,>=، =، و. تُستخدم عادةً عوامل المقارنة لمقارنة السلاسل والتعبيرات الحسابية.,>
يوضح بناء الجملة التالي استخدام جملة WHERE:
SELECT column_lists, FROM table_name WHERE conditions GROUP BY column_lists;
دعونا نأخذ مثالا لفهم هذه الجملة. لنفترض أن لدينا جدول اسمه موظفين والتي تحتوي على البيانات التالية:
إذا أردنا للحصول على تفاصيل الموظف الذي تزيد ساعات عمله عن 9 ، فيمكننا استخدام العبارة على النحو التالي:
mysql> SELECT * FROM employees WHERE working_hour > 9;
سنحصل على الإخراج أدناه حيث يمكننا رؤية تفاصيل الموظف الذي تزيد ساعات عمله عن 9:
إذا استخدمنا الاستعلام أعلاه مع مجموعة من الشرط، سوف نحصل على نتيجة مختلفة:
mysql> SELECT * FROM employees WHERE working_hour > 9 GROUP BY name;
هنا هو الإخراج:
CSS النص الغامق
وجود شرط
جملة HAVING في MySQL تستخدم جنبا إلى جنب مع GROUP BY تمكننا العبارة من تحديد الشروط التي تعمل على تصفية نتائج المجموعة التي تظهر في النتيجة. تقوم بإرجاع فقط تلك القيم من المجموعات في النتيجة النهائية التي تستوفي شروطًا معينة. يمكننا أيضًا استخدام جملة WHERE وHAVING معًا أثناء التحديد. في هذه الحالة، تقوم جملة WHERE أولاً بتصفية الصفوف الفردية، ثم يتم تجميع الصفوف، وإجراء حسابات مجمعة، وفي النهاية تقوم جملة HAVING بتصفية المجموعات.
تضع هذه الجملة شروطًا على المجموعات التي تم إنشاؤها بواسطة جملة GROUP BY. يتصرف مثل جملة WHERE عندما لا تستخدم عبارة SQL الكلمة الأساسية GROUP BY. يمكننا استخدام وظائف التجميع (المجموعة) مثل SUM وMIN وMAX وAVG و عدد فقط مع جملتين: SELECT وHAVING.
يوضح بناء الجملة التالي استخدام جملة HAVING:
SELECT column_lists, aggregate_function (expression) FROM table_name WHERE conditions GROUP BY column_lists HAVING condition;
دعونا نأخذ مثالا لفهم هذه الجملة. نحن هنا نفكر في نفس الجدول موظفين للتظاهر.
ملف CSV قراءة جافا
إذا أردنا للحصول على إجمالي ساعات العمل لكل موظف تزيد مدة عمله عن 6 ساعات ، فيمكننا استخدام العبارة على النحو التالي:
mysql> SELECT name, SUM(working_hour) AS 'Total working hours' FROM employees GROUP BY name HAVING SUM(working_hour) > 6;
سنحصل على الإخراج أدناه حيث يمكننا رؤية إجمالي ساعات العمل لكل موظف:
الاختلافات الرئيسية بين أين وشرط وجود
توضح النقاط التالية الاختلافات الرئيسية بين قاعدة البيانات والمخطط:
- تقوم جملة WHERE بتصفية الصفوف الفردية، بينما تقوم جملة HAVING بتصفية المجموعات بدلاً من صف واحد في كل مرة.
- لا يمكننا استخدام جملة WHERE مع الوظائف المجمعة لأنها تعمل على تصفية الصفوف الفردية. في المقابل، يمكن أن تعمل HAVING مع الوظائف المجمعة لأنها تستخدم لتصفية المجموعات.
- تتم معالجة عمليات الصفوف بواسطة جملة WHERE، بينما تعالج جملة HAVING عمليات الأعمدة في الصفوف أو المجموعات الملخصة.
- تأتي كلمة WHERE قبل GROUP BY، مما يعني تصفية صفوف جملة WHERE قبل إجراء العمليات الحسابية المجمعة. يأتي HAVING بعد GROUP BY، مما يعني أن جملة HAVING تقوم بتصفية الصفوف بعد إجراء العمليات الحسابية المجمعة. وبالتالي، فإن HAVING أبطأ من WHERE من حيث الكفاءة ويجب تجنبه حيثما أمكن ذلك.
- يمكننا دمج جملة WHERE وHAVING معًا في استعلام SELECT. في هذه الحالة، يتم استخدام جملة WHERE أولاً لتصفية الصفوف الفردية. يتم بعد ذلك تجميع الصفوف، وإجراء عمليات حسابية مجمعة، وأخيرًا، يتم استخدام جملة HAVING لتصفية المجموعات.
- تقوم جملة WHERE باسترداد البيانات المطلوبة بناءً على الشرط المحدد. من ناحية أخرى، تقوم جملة HAVING أولاً بجلب البيانات الكاملة، ثم يتم الفصل بناءً على الشرط المحدد.
- بدون عبارة SELECT، لا يمكننا استخدام جملة HAVING. على العكس من ذلك، يمكننا استخدام WHERE مع عبارات التحديد والتحديث والحذف.
- عبارة WHERE عبارة عن مرشح مسبق، في حين أن عبارة HAVING عبارة عن مرشح لاحق.
أين مقابل وجود مخطط مقارنة
يشرح مخطط المقارنة التالي الاختلافات الرئيسية بينهما بطريقة سريعة:
أساس المقارنة | حيث الشرطية | وجود شرط |
---|---|---|
تعريف | يتم استخدامه لإجراء الترشيح على الصفوف الفردية. | يتم استخدامه لإجراء الترشيح على المجموعات. |
أساسي | يتم تنفيذه في عمليات الصف. | يتم تنفيذه في عمليات العمود. |
جلب البيانات | تقوم جملة WHERE بجلب البيانات المحددة من صفوف معينة بناءً على الشرط المحدد | تقوم جملة HAVING أولاً بجلب البيانات الكاملة. ومن ثم يفصلهم وفقا للحالة المحددة. |
وظائف مجمعة | لا تسمح جملة WHERE بالعمل مع الوظائف المجمعة. | يمكن أن تعمل جملة HAVING مع الوظائف المجمعة. |
يتصرف مثل | تعمل جملة WHERE كمرشح مسبق. | تعمل جملة HAVING كمرشح لاحق. |
يستعمل مع | يمكننا استخدام جملة WHERE مع عبارات SELECT وUPDATE وDELETE. | يمكن استخدام جملة HAVING فقط مع عبارة SELECT. |
مجموعة من | تأتي جملة GROUP BY بعد جملة WHERE. | تأتي جملة GROUP BY قبل جملة HAVING. |
خاتمة
في هذه المقالة، قمنا بإجراء مقارنة بين جملة WHERE وHAVING. هنا، نستنتج أن كلا الجملتين تعملان بنفس الطريقة في تصفية البيانات، باستثناء بعض الميزات الإضافية التي تجعل جملة HAVING أكثر شيوعًا. يمكننا العمل بكفاءة مع الوظائف المجمعة في جملة HAVING بينما لا يسمح WHERE بالوظائف المجمعة.