View Full Version : تفاوت having و where برای شرط گذاری در کوری؟
one hacker alone
یک شنبه 26 آذر 1391, 20:10 عصر
با یاد خدا
با سلام
ما در کوری دستور where رو برای شرط گذاری استفاده میکنیم و در group by از دستور having استفاده میکنیم برای شرط گذاری
خواستم بدونم تفاوت این دو دستور چیه؟
حمیدرضاصادقیان
دوشنبه 27 آذر 1391, 00:33 صبح
سلام
شرط where روی نتیجه Select شما اعمال میشه و بعد اون نتیجه در Group By شرکت داده میشه وشرط Having روی نتیجه Group by اعمال خواهد شد
one hacker alone
دوشنبه 27 آذر 1391, 01:27 صبح
سلام
خوب مگه نمیشه ما شرط اول رو به نحوی تنظیم کنیم که دیگه نیازی به having نباشه؟؟؟
کجا مجبوریم از having استفاده کنیم؟
Reza_Yarahmadi
دوشنبه 27 آذر 1391, 07:56 صبح
با یه مثال توضیح میدم:
فرض کنید در یک سیستم فروش به ازا هر مشتری چند فاکتور صادر شده ، حالا شما میخواید نام مشتری هایی رو پیدا کنید که ساکن تهران هستند و مجموع خرید های اونها بیشتر از یک میلیون است. توی این حالت شما باید کوئریی شبیه کد زیر بنویسید
Select C.ID
From
Sell S Inner Join Customer C
ON
S.CID = C.ID
Where
C.CityName = 'Tehran'
Group By
C.ID
Having
Sum(S.InvoicePrice) > 1000000
(توی مثال بالا شما نمیتونید شرط مجموع خرید بالای یک میلیون رو در Where بیارید)
حمیدرضاصادقیان
دوشنبه 27 آذر 1391, 08:59 صبح
توضیح آقای یار احمدی کامله.
این برمیگرده به نحوه و ترتیب اجرای دستورات توسط SQL Server.
Where همیشه روی نتیجه برگردانده شده از Select ها و Join ها اعمال میشه.یعنی یک جدول مجازی از نتیجه آنها ایجاد میشه و Where روی اون اعمال میشه.
بعد از این تازه Group By روی این جدول مجازی اجرا میشه و کار میکنه. و یک جدول مجازی دومی ایجاد میکنه که نتیجه گروه بندی شده جدول اول هست.
در اینجا دیگه شرط Where وجود نداره به خاطر اینکه قبلا Parse شده و فیلترهای لازم اجرا شده.
حالا ما نیاز داریم روی نتیجه مربوط به جدول مجازی دوم که حاصل از Group By هست یک شرط جدید اعمال کنیم که مجبور هستیم از Having استفاده کنیم که در اینجا مثال آقای یاراحمدی کامل است.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.