JOIN SQL
- صفحه قبل SQL Aliases
- صفحه بعدی SQL Inner Join
SQL join برای جستجوی دادهها از روی ارتباط بین ستونهای دو یا چند جدول استفاده میکند.
Join و Key
گاهی اوقات برای دریافت نتایج کامل، نیاز داریم که از دو یا چند جدول داده دریافت کنیم. در این صورت باید از عملیات join استفاده کنیم.
جداول موجود در پایگاه داده میتوانند با استفاده از کلیدها به یکدیگر مرتبط شوند. کلید اصلی (Primary Key) یک ستون است که در هر ردیف از آن، مقدار منحصر به فرد است. در جدول، هر مقدار کلید اصلی منحصر به فرد است. هدف از این کار، پیوند دادههای بین جداول است بدون اینکه نیاز به تکرار همه دادههای هر جدول باشد.
لطفاً جدول "Persons" را مشاهده کنید:
Id_P | LastName | FirstName | آدرس | شهر |
---|---|---|---|---|
1 | آدامز | جان | شارع آکسفورد | لندن |
2 | بوش | جرج | ایست ساحلی | نیویورک |
3 | کارتر | توماس | شارع چانگآن | بیکینگ |
لطفاً توجه کنید که ستون "Id_P" یک کلید اصلی در جدول "Persons" است. این به این معناست که هیچ دو ردیف نمیتوانند کلید اصلی مشابهی داشته باشند. حتی اگر نام دو نفر کاملاً مشابه باشد، کلید اصلی میتواند آنها را از یکدیگر تمیز دهد.
در ادامه لطفاً جدول "Orders" را مشاهده کنید:
Id_O | OrderNo | Id_P |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 1 |
4 | 24562 | 1 |
5 | 34764 | 65 |
لحظ کنید، ستون "Id_O" یک کلید اصلی در جدول "Orders" است، در عین حال، ستون "Id_P" در جدول "Orders" برای ارجاع به جدول "Persons" استفاده میشود بدون اینکه نیاز به استفاده از نام دقیق افراد باشد.
لطفاً توجه داشته باشید که ستون "Id_P" دو جدول بالا را با هم در ارتباط قرار میدهد.
اشاره به دو جدول
میتوانیم از اشاره به دو جدول برای دریافت دادهها از دو جدول استفاده کنیم:
چه کسی محصول را سفارش داده است و چه محصولی سفارش داده است؟
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons, Orders WHERE Persons.Id_P = Orders.Id_P
نتایج مجموعه:
LastName | FirstName | OrderNo |
---|---|---|
آدامز | جان | 22456 |
آدامز | جان | 24562 |
کارتر | توماس | 77895 |
کارتر | توماس | 44678 |
SQL JOIN - استفاده از Join
علاوه بر روشهای بالا، میتوانیم از کلمه کلیدی JOIN برای دریافت دادهها از دو جدول استفاده کنیم.
اگر میخواهیم لیست همه سفارشات افراد را لیست کنیم، میتوانیم از دستور SELECT زیر استفاده کنیم:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons INNER JOIN Orders ON Persons.Id_P = Orders.Id_P ORDER BY Persons.LastName
نتایج مجموعه:
LastName | FirstName | OrderNo |
---|---|---|
آدامز | جان | 22456 |
آدامز | جان | 24562 |
کارتر | توماس | 77895 |
کارتر | توماس | 44678 |
انواع مختلف SQL JOIN
علاوه بر INNER JOIN (پیوند داخلی) که در مثالهای بالا استفاده کردهایم، میتوانیم از چندین نوع پیوند دیگر استفاده کنیم.
در زیر لیستی از انواع JOIN قابل استفاده و تفاوتهای آنها آورده شده است.
- JOIN: اگر در جدول حداقل یک تطابق وجود داشته باشد، ردیفها بازمیگردد
- LEFT JOIN: حتی اگر در جدول راست تطابق وجود نداشته باشد، همه ردیفهای جدول چپ بازمیگرداند
- RIGHT JOIN: حتی اگر در جدول چپ تطابق وجود نداشته باشد، همه ردیفهای جدول راست بازمیگرداند
- FULL JOIN: اگر در یکی از جدولها تطابق وجود داشته باشد، ردیفها بازمیگردد
- صفحه قبل SQL Aliases
- صفحه بعدی SQL Inner Join