SQL لتقف على لغة الاستعلام الهيكلية . وهي لغة قاعدة بيانات شاملة أو تعريفية تستخدم للوصول إلى البيانات من قواعد البيانات.
رسم بياني للمقارنة
أساس للمقارنة | أين | وجود |
---|---|---|
الأساسية | نفذت في عمليات الصف. | نفذت في عمليات العمود. |
تنطبق على | صف واحد | صف ملخّص أو مجموعات. |
جلب البيانات | فإنه يجلب فقط بيانات معينة من صفوف معينة وفقا لهذا الشرط. | في البداية ، يتم جلب البيانات الكاملة ثم فصلها وفقًا للحالة. |
وظائف مجمعة | لا يمكن أن تظهر في جملة WHERE. | يمكن أن تظهر في جملة HAVING. |
يستعمل مع | SELECT وعبارات أخرى مثل UPDATE أو DELETE أو أي منهما. | لا يمكن استخدامه بدون عبارة SELECT. |
يتصرف مثل | ما قبل التصفية | بعد التصفية |
مجموعة من | يأتي بعد WHERE. | يأتي بعد HAVING. |
تعريف البند حيث
يتم استخدام جملة SQL WHERE لوصف شرط في وقت استرداد البيانات من جدول واحد أو عن طريق الانضمام مع جداول متعددة. تقوم فقط بإرجاع القيمة المعينة من الجدول إذا تم استيفاء الشرط المحدد. يتم استخدام جملة WHERE للتغلغل في السجلات واسترداد السجلات الضرورية فقط.
يقوم SQL أيضًا بتنفيذ الوصلات المنطقية ، أو وليس في جملة WHERE والتي تعرف أيضًا باسم الشرط المنطقي ؛ يجب أن يكون الشرط صحيحًا لاسترداد الصفوف. تتضمن معاملات تعبيرات connective المنطقية عوامل المقارنة مثل < ، <= ، > ، > = ، = ، و . تقارن عوامل المقارنة هذه بين السلاسل والتعبيرات الحسابية. يمكن استخدامه في عبارة SELECT ، وكذلك في عبارات UPDATE و DELETE .
دعونا نأخذ مثالا. يتكون الجدول الموضح أدناه باسم جدول " المبيعات " من سمات " المنتج " و " Sales_amount ".
SELECT Product، sum (Sales_amount) AS Total_sales FROM Sales Where المنتج في ('Phone'، 'Speakers') GROUP BY Product؛
تعريف وجود شرط
يوفر SQL جملة HAVING التي يمكن استخدامها بالاقتران مع جملة GROUP BY . تساعد هذه الفقرة HAVING في استرداد قيم المجموعات التي تستوفي شروطًا معينة. يمكن أيضًا استخدام عبارة WHERE بالاقتران مع جملة HAVING أثناء التحديد ، حيث تقوم جملة WHERE بتصفية الصف الفردي. ثم يتم تجميع الصفوف ، ويتم تنفيذ العمليات الحسابية المجمعة ، في آخر فقرة HAVING تقوم بتصفية المجموعات.
يتصرف في نفس WHERE عندما لا يتم استخدام الكلمة GROUP BY. يمكن أن تظهر وظائف المجموعة مثل min و max و avg و sum و count في جملتين فقط: SELECT و HAVING clause. يوفر شرطًا على المجموعات المقابلة لكل قيمة في مجموعة السمات. سيتم عرض المجموعة الوحيدة من السجلات التي تفي بالشرط كنتيجة.
هنا أيضًا نتخذ المثال نفسه في جملة WHERE ونأخذ بعين الاعتبار جدول " المبيعات " نفسه. عندما نريد حساب Total_sales للهاتف ومكبرات الصوت باستخدام عبارة HAVING ، سنكتب طلب البحث التالي.
SELECT Product، sum (Sales_amount) AS Total_sales FROM Sales GROUP BY HAVING Product in ('phone'، 'Speakers')؛
ينتج الاستعلام الناتج التالي حيث يتم استرجاع المنتجات أولاً ، ثم يتم تنفيذ الدالة التجميعية (sum) ويتم ترشيح المجموعات الأخيرة بخلاف جملة WHERE.
عندما نريد أن نجد فقط تلك المنتجات التي يكون فيها Total_sales أكبر من 1000. يمكن كتابة الاستعلام على النحو التالي:
SELECT Product، sum (Sales_amount) AS Total_sales FROM Sales GROUP BY Product HAVING sum (Sales_amount)> 1000؛
الناتج الناتج هو:
لا يمكن تنفيذ ذلك باستخدام جملة WHERE على الرغم من HAVING ويقوم بإنشاء رسالة خطأ لأن WHERE لا يمكن استخدام الجملة مع الدالات التجميعية.
الاختلافات الرئيسية بين مكان وعبارة
- يتم استخدام جملة WHERE في عمليات الصف ويتم تطبيقها على صف واحد بينما يتم استخدام جملة HAVING في عمليات العمود ويمكن تطبيقها على الصفوف أو المجموعات الملخصة.
- في جملة WHERE ، يتم جلب البيانات المطلوبة وفقًا للشرط المطبق. في المقابل ، تحل جملة HAVING بيانات كاملة ، ثم يتم الفصل وفقًا للحالة.
- لا يمكن أبدًا أن تظهر الدوال التجميعية مثل min و sum و max و avg مع جملة WHERE. في مقابل ذلك ، يمكن أن تظهر هذه الوظائف في جملة HAVING.
- لا يمكن استخدام جملة HAVING بدون عبارة SELECT. على العكس ، يمكن استخدام WHERE مع SELECT ، UPDATE ، DELETE ، إلخ.
- تعمل عبارة WHERE كتصفية مسبقة بينما يعمل البند HAVING بمثابة فلتر ما بعد.
- WHERE عبارة عند استخدامها مع GROUP BY ، يأتي قبل GROUP BY. هذا يدل على أن WHERE من صفوف التصفية قبل إجراء الحسابات المجمعة. من ناحية أخرى ، يأتي HAVING بعد GROUP BY ، مما يعني أنه يتم تصفية بعد إجراء الحسابات المجمعة.
استنتاج
WHERE وعبارة HAVING تعمل بنفس الطريقة باستثناء الميزة الإضافية التي تشتهر بها جملة HAVING. يمكن أن تعمل عبارة HAVING بكفاءة مع وظائف التجميع بينما لا يمكن تشغيل WHERE بوظائف تجميعية.