# پایگاه‌های داده > SQL Server > آموزش: انواع JOIN در SQL (پایگاه داده ها)

## raha1234567

Inner Join : در این روش سطرهایی نمایش داده می شوند که در هر دو جدولی که با هم Join شده اند وجود دارند. فرض کنید که دو جدول به نام titles و publishers داریم و می خواهیم برای هر title ، publisher آنرا تعیین کنیم. در اینصورت از Inner Join بصورت زیر استفاده می کنیم : 

SELECT title, pub_name
FROM titles INNER JOIN
publishers ON titles.pub_id = publishers.pub_id

در اینصورت title هایی که publisher ندارند یا publisher هایی که title ندارند هیچ کدام در خروجی نمی آیند.

Outer Join : در این روش سطرهایی از جدول اصلی که سطر متناظرشان در جدول دیگر وجود ندارد هم در خروجی می آیند. بسته به اینکه بخواهیم کدامیک از سطرهایی که در جدول دیگر متناظر ندارند هم در خروجی بیایند، سه نوع Outer Join بصورت زیر تعریف می شود :

1- Left Outer Join : تمام سطرهای جدول اولی (جدولی که در سمت چپ Join قرار گرفته است) در خروجی ظاهر می شوند. ولی سطرهایی از جدول دوم که متناظری در جدول اول ندارند در خروجی نمی آیند. بعنوان مثال دستور زیر تمام title ها ، حتی آنهایی که publisher ندارند، را در خروجی نشان می دهد :

SELECT titles.title_id, titles.title, publishers.pub_name
FROM titles LEFT OUTER JOIN publishers
ON titles.pub_id = publishers.pub_id

2- Right Outer Join : تمام سطرهای جدول دومی (جدولی که در سمت راست Join قرار گرفته است) در خروجی ظاهر می شوند. بعنوان مثال دستور زیر تمام publisher ها را نشان می دهد حتی آنهایی که title ندارند هم در خروجی نمایش داده می شوند:

SELECT titles.title_id, titles.title, publishers.pub_name
FROM titles RIGHT OUTER JOIN publishers
ON titles.pub_id = publishers.pub_id

3- Full Outer Join : تمام سطرهای هر دو جدول در خروجی می آیند چه در جدول دیگر متناظر داشته باشند چه نداشته باشند. به عنوان مثال دستور زیر تمام title ها و تمام publisher ها را نشان می دهد: 

SELECT titles.title_id, titles.title, publishers.pub_name
FROM titles FULL OUTER JOIN publishers
ON titles.pub_id = publishers.pub_id

Cross Join : نتیجه این Join تمام ترکیباتی است که از قرار گرفتن هر سطر از جدول اولی در کنار تمام سطرهای جدول دومی بدست می آید(همانند حاصلضرب دکارتی). بعنوان مثال authors Cross Join Publisher مجموعه تمام حالتهای ممکن author/publisher را در خروجی تولید می کند :

SELECT * FROM authors CROSS JOIN publishers




دوستان خوشتون اومد یه تشکر بکنید. :چشمک:  :قلب: 

موفق باشید

----------


## raha1234567

دوستان اگه خوشتون اومد بگید تا آموزش های دیگه رو هم بذارم.
 :قلب:  :چشمک:  :لبخند:

----------


## raha1234567

دوستان اگه نظری دارید بگید خوشحال میشم. :لبخند:

----------


## raha1234567

دوستان گفته شده منبع ها را هم بگم .
من این مطلب را بر حسب نیاز از اینترنت سرچ کردم گفتم برا شما هم بذارم شاید بدردتون خورد.

----------


## sheytoon.bala89

> همانند حاصلضرب دکارتی



ميشه بگي:ضرب دكارتي چيه؟ضرب دكارتي دو جدول چيه؟اگه دو جدول فيلد مشترك نداشته باشن ميتونيم Join كنيم يا نه.آيا بايد فيلد مشترك حتما كليد باشه؟ (اگه ميتونه كليد نباشه چه عواقبي را به دنبال داره.)آيا عكس عمل Join وجود داره؟

----------


## raha1234567

> ميشه بگي:ضرب دكارتي چيه؟ضرب دكارتي دو جدول چيه؟اگه دو جدول فيلد مشترك نداشته باشن ميتونيم Join كنيم يا نه.آيا بايد فيلد مشترك حتما كليد باشه؟ (اگه ميتونه كليد نباشه چه عواقبي را به دنبال داره.)آيا عكس عمل Join وجود داره؟


شرمنده عزیز من که گفتم این اطلاعات را بر حسب نیاز پیدا کردم و تا حد تعریف join ها دارم تا چند روز دیگه این اطلاعتم که کامل شد براتون جواب میذارم

----------


## sheytoon.bala89

> شرمنده عزیز


مشكلي نيست.
نميخواد خودتو اذيت كني.
راضي به زحمت نيستم.

----------


## mahdi_farhani

> ميشه بگي:ضرب دكارتي چيه؟ضرب دكارتي دو جدول چيه؟اگه دو جدول فيلد مشترك نداشته باشن ميتونيم Join كنيم يا نه.آيا بايد فيلد مشترك حتما كليد باشه؟ (اگه ميتونه كليد نباشه چه عواقبي را به دنبال داره.)آيا عكس عمل Join وجود داره؟


ضرب دکارتی : یک عمل ریاضی است که برای تولید یک زوج مرتب از دو مجموعه استفاده میشه ، و تمام اعضای مجموعه اول را در مجوعه دوم به صورت زوج مرتب ایجاد میکند . مولفه اول زوج مرتب از مجموعه اول و مولفه دوم از مجموعه دوم
A={a,b,c}
B={1,2}

دو مجموعه فوق را در نظر بگیرید، حاصل ضرب دکارتی آن به این شکل است
C={(a,1)(a,2)(b,1)(b,2)(c,1)(c,2)}

-ضرب دکارتی دو جدول هم همین است ،با این تفاوت که بر روی رکوردهای انجام میشود.
-فیلد مشترک یعنی چی ؟ بله در CROSS Join شما نیازی به فیلد ندارید ولی در بقیه موارد برای اینکه یک رابطه بین دو جدول باشند باید فیلدی را مشخص کنید

-نه خیر ربطی به کلید بودن نداره ، ولی تا حالا برای من پیش نیومده که بخواهم پیوندی را بزنم که یک طرف کلید اصلی نباشه
مثال نقض : جدولی به این شکل دارید :
1- ID  , int Primery Key , Auto increment
2- Melicode , nvarchar(15) Uniqe
,....
-----
جدول دوم به این شکل است
1-MeliCode nvarchar(15) 
2-Cost money
,.....
پیوندی که روی این دو جدول زده میشه روی کد ملی انجام میشه ، وکد ملی کلید نیست . ( البته در جدول دوم به عنوان کلید خارجی شناخته میشه)
(البته از نظر طراحی مشکل دارد ، فقط برای اینکه سوالتون رو جواب داده باشم این مثال رو زدم)

-منظورتون از عکس عمل پیوند رو متوجه نشدم ؟!
چه چیزی رو میخواهین جدا کنید ؟! جداول که خودشون جدا هستند و هر زمان که نیاز دارید جداشون کنید خوب به تنهایی استفاده کنید

----------


## sheytoon.bala89

> چه چیزی رو میخواهین جدا کنید ؟! جداول که خودشون جدا هستند و هر زمان که نیاز دارید جداشون کنید خوب به تنهایی استفاده کنید


جدول بزرگي دارم ميخوام بشكنمش به جدولهاي كوچكتر (دليل خاصي به ذهنم نميرسه كه بگم ولي حتما نياز ميشه)

----------

