مطابق استاندارد رسمی SQL، عبارت Having تنها میتواند حاوی شرطهایی برای محدود کردن نتایج GROUP BY باشد. با این حال «MySQL 5.0.2» و جدیدتر به شما اجازه میدهد شرط خود را بدون داشتن GROUP BY با کمک Having بنویسید.
دو تفاوت اساسی میان Having و Where وجود دارد که میتواند در انتخاب هر یک موثر باشد.
۱- زمان اجرا:
Where در مرحلهی جستجوی ردیفها مورد ارزیابی قرار میگیرد. یعنی پایگاه داده در هنگامی که جدولها را پردازش میکند شرط مقابل Where را نیز در جستجو دخیل میکند.
Having تقریبا در پایان مراحل و پیش از آنکه نتایج به مشتری ارسال شود، نتایج یافته شده توسط Where را پاکسازی میکند.
۲- بهینهسازی
با توجه به آنچه در مورد زمان اجرای هر یک از عبارتهای Where و Having گفته شد، مشخص است که اعمال بهینهسازی بر روی Where امکانپذیر و در خصوص Having ناممکن است. زیرا Having نقشی در یافتن رکوردها ندارد و تنها کار حذف رکوردهای نادرست را انجام میدهد.
با توجه به دو تفاوت گفته شده، کاربردهای مختلفی نیز برای این دو دستور به وجود میآید.
یکی از بهترین مثالها برای استفاده از Having هنگامی است که میخواهید یک فیلد محاسباتی را که با ALIAS نامی برای آن برگزیدهاید، فیلتر کنید.
ادامهی خواندن