PDA

View Full Version : جوین کردن



irpersian20
یک شنبه 17 دی 1391, 02:09 صبح
سلام
ما وقتی Join میکنیم یا از From استفاده می کنیم.
مخصوصا From میگیم خوب جدول 1 با جدول 2 با هم ادغام میشن هر جا که کلید خارجی برابر با کلید اصلی در جدول ها باشد درسته؟ مثلا
from emp,test
یعنی خودش انجام میده.اونجایی که مثلا id ها مشترک هست رو میزاره کنار هم و ادغام میکنه رکورد ها رو.
پس چرا ما باز آخرش میزنیم مثلا
Where emp.id=test.id
اگر نزنیم چی میشه؟

hossein_h62
یک شنبه 17 دی 1391, 08:49 صبح
سلام
موقعی که از انواع Join استفاده میکنیم لزومی نداره که جدولهای ادغام شده Relation داشته باشن و از طریق کلید اصلی و خارجی بهم ربط داشته باشن.

irpersian20
یک شنبه 17 دی 1391, 11:11 صبح
سلام
میشه لطف کنید یکمی بیشتر توضیح بدهید؟ البته اگر امکان داره
ما وقتی از join استفاده میکنیم پس میتونیم کلید مشترکی هم بین این دو جدول نداشته باشیم. درسته؟
خوب اگر کلید مشترک داشته باشیم بر اساس اون کلید میاد این ها رو ادغام میکنه با هم آره؟
این جریان Where emp.id=test.id چی هست؟ وقتی که ما دو کلید برابر داریم مگه خودش خودکار نمیاد اینها رو با کلید مشترک میزنه سرهم؟
پس ما چرا where رو میزاریم و نزاریم چه فرق داره؟
ببخشید امتحان دارم و تو کتاب هم نزده این توضیح رو

hossein_h62
یک شنبه 17 دی 1391, 12:09 عصر
ما وقتی از join استفاده میکنیم پس میتونیم کلید مشترکی هم بین این دو جدول نداشته باشیم. درسته؟
خوب اگر کلید مشترک داشته باشیم بر اساس اون کلید میاد این ها رو ادغام میکنه با هم آره؟
این جریان Where emp.id=test.id چی هست؟ وقتی که ما دو کلید برابر داریم مگه خودش خودکار نمیاد اینها رو با کلید مشترک میزنه سرهم؟
پس ما چرا where رو میزاریم و نزاریم چه فرق داره؟
بله جداول میتونن ارتباط داشته باشن یا نداشته باشن. ما در قسمت ON (نه در قسمت WHERE) تعریف میکنیم که کدام فیلدها از جدولهامون چه ارتباطی داشته باشند. مثلا :
SELECT e.BusinessEntityID FROM HumanResources.Employee AS e INNER JOIN Sales.SalesPerson AS s ON e.BusinessEntityID = s.BusinessEntityID
در قسمت WHERE میتونیم روی جداول شرط اعمال کنیم مثلا در کوئری بالا :
SELECT e.BusinessEntityID
FROM HumanResources.Employee AS e
INNER JOIN Sales.SalesPerson AS s
ON e.BusinessEntityID = s.BusinessEntityID
WHERE e.Salary > 5000000

محمد سلیم آبادی
دوشنبه 18 دی 1391, 22:51 عصر
بله جداول میتونن ارتباط داشته باشن یا نداشته باشن. ما در قسمت ON (نه در قسمت WHERE) تعریف میکنیم که کدام فیلدها از جدولهامون چه ارتباطی داشته باشند. مثلا :
SELECT e.BusinessEntityID FROM HumanResources.Employee AS e INNER JOIN Sales.SalesPerson AS s ON e.BusinessEntityID = s.BusinessEntityID
در قسمت WHERE میتونیم روی جداول شرط اعمال کنیم مثلا در کوئری بالا :
SELECT e.BusinessEntityID
FROM HumanResources.Employee AS e
INNER JOIN Sales.SalesPerson AS s
ON e.BusinessEntityID = s.BusinessEntityID
WHERE e.Salary > 5000000
join کردن دو syntax داره یک نوع قدیمی و کلاسیکش هست و یکی جدید.
دوستمون اشاره به نسخه قدیمش داره یعنی به این فرم (ابتدا ضرب دکارتی دو جدول سپس فیلترکردن سطرهای مورد نظر در WHERE)

SELECT * FROM Table1, Table2 WHERE Table1.code = Table2.code
که کد فوق معادل کد زیر هست:

SELECT * FROM Table1 CROSS JOIN Table2 WHERE Table1.code = Table2.code
اما در شکل جدیدش ضرب دکارتی و فیلترینگ همگی در FROM صورت میگیره.