PDA

View Full Version : تفاوت بین on وwhere در join



gelayor14
جمعه 19 دی 1393, 20:42 عصر
سلام
توی دستورات join گاهی از where گاهی از on استفاده می کنند آیا تفاوتی در استفاده از اینها هست؟اگر هست چرا، کدوم بهتره

abynaneh63
شنبه 20 دی 1393, 12:21 عصر
با سلام و درورد.
دستور where یک دستور شرطی است و join یک دستور برای ارتباط دادن فیلدهای مشترک بین دو جدول که بعد از دستور join از on استفاده می شود که در این قسمت فیلدهای مشترک را وارد می کنند.
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
INNER JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName

tooraj_azizi_1035
چهارشنبه 24 دی 1393, 21:25 عصر
سلام
بستگی به نوع JOIN داره.

اگه از OUTER JOIN استفاده کنید شرط مقابل ON باعث حذف قطعی یک رکورد از خروجی نمیشود:

Customers C LEFT OUTER JOIN Orders O ON C.CustomerID=O.CustomerID

در شرط بالا اگر یک مشتری سفارش ثبت نکرده باشد در خروجی ظاهر میشود اما رکوردی که شرط WHERE را ارضاء نکند در خروجی قطعاً ظاهر نمی شود. به رکوردهایی که شرط ON رو ارضاء نکنند Outer Rows گفته میشه.

در اجرای فاز JOIN مرحله ای وجود داره به نام Add Outer Rows که در نوع OUTER از فاز اجرا میشه و رکوردهای Outer رو به خروجی اضافه میکنه.

این موضوع فقط وقتی که نوع OUTER رو استفاده می کنیم صادقه و در مورد INNER JOIN تفاوتی بین WHERE و ON وجود نداره.

فازهای اجرای کوئری رو در کتاب Inside Microsoft SQL Server 2008 T-SQL Querying دنبال کن.